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

📄 xlib.c

📁 rxvt经典的linux下的终端.小巧实用
💻 C
📖 第 1 页 / 共 5 页
字号:
	"-gb2312", GB2312_CHARSET,	"-big5", CHINESEBIG5_CHARSET,	"-jis", SHIFTJIS_CHARSET,	NULL, DEFAULT_CHARSET    };    int i;    char *p;    if (!name)    {	if (lang) *lang=NULL;	return DEFAULT_CHARSET;    }    else if (lang) *lang=(char *)name+strlen((char *)name);    for (i=0; charset[i].label; i++)	if (NULL!=(p=strstr(name, charset[i].label)))	{	    if (lang) *lang=p;	    break;	}    return charset[i].id;}/* attempts to translate the font name into** something win32 understands.** */FontNT_loadfont(name)char *name;{    LOGFONT lf;    HFONT hfont;    char *p,*q,*lang;    int size = 0;    char buff[33];	    memset(&lf,0,sizeof(lf));    lf.lfHeight = -13;	    lf.lfWeight = FW_NORMAL;    lf.lfFaceName[0]='\0';	    lf.lfCharSet = getCharSetFromName(name,&lang);        if (name && strstr(name,"-bold"))    {	lf.lfWeight = FW_BOLD;    }    for(p=name, q=buff; p&&p<=lang; p++)    {	if (((!*p || *p=='-') && q!=buff) || (q-buff>31))	{	    *q++='\0';	    if (lf.lfFaceName[0]=='\0')	    {		if (isalpha(buff[0]) || IsDBCSLeadByte(buff[0]))		    strcpy(lf.lfFaceName, buff);		else if (isdigit(buff[0]) && ((q=strchr(buff,'x')) || (q=strchr(buff,'X'))))		{		    strcpy(lf.lfFaceName, "Courier New");		    size = -atoi(q+1);		}		else if (size == 0 && isdigit(buff[0]))		    size = -atoi(buff);	    }	    else if (size == 0 && isdigit(buff[0]))	    {						size = -atoi(buff);	    }	    q = buff;	}	else	    *q++ = *p;	if (!*p) break;    }	    if (size > 99)	lf.lfHeight = - (size/10);    else if (size)	lf.lfHeight = - size;        if (!strcmp(lf.lfFaceName,"lucidatypewriter"))	strcpy(lf.lfFaceName,"Lucida Console");    else if (lf.lfFaceName[0]=='\0'&&lf.lfCharSet==DEFAULT_CHARSET)	strcpy(lf.lfFaceName,"Courier New");    hfont = CreateFontIndirect(&lf);    return (Font)hfont;}XFontStruct *XLoadQueryFont(Display *display, const char *name){    XFontStruct *fs;    TEXTMETRIC tm;    HDC hdc;    HWND root;    HFONT old;    int i;	    xtrace("XLoadQueryFont\n");    fs = allocateMemory(sizeof(XFontStruct));    fs->fid = NT_loadfont(name);    root=GetDesktopWindow();    hdc=GetDC(root);    old = SelectObject(hdc, (HFONT)fs->fid);    GetTextMetrics(hdc, &tm);    fs->min_bounds.width = tm.tmAveCharWidth;    fs->max_bounds.width = tm.tmMaxCharWidth;    fs->n_properties = 0;    fs->properties = NULL;    fs->min_char_or_byte2 =tm.tmFirstChar;    fs->max_char_or_byte2 =tm.tmLastChar;    fs->per_char = (XCharStruct*)allocateMemory(sizeof(XCharStruct)*(tm.tmLastChar+1));    ZeroMemory(fs->per_char, sizeof(XCharStruct)*(tm.tmLastChar+1));    if (!(tm.tmPitchAndFamily & TMPF_FIXED_PITCH)) {	for (i=tm.tmFirstChar; i<=tm.tmLastChar; i++) {	    fs->per_char[i].width = tm.tmAveCharWidth;	    fs->per_char[i].rbearing = tm.tmAveCharWidth; 	}    } else if (tm.tmPitchAndFamily & TMPF_TRUETYPE) {	for (i=tm.tmFirstChar; i<=tm.tmLastChar; i++)	{	    ABC abc;	    if (!GetCharABCWidths(hdc,i,i,&abc))	    {		abc.abcA = 0;		abc.abcB = tm.tmAveCharWidth;		abc.abcC = 0;	    }	    fs->per_char[i].lbearing = abc.abcA;	    fs->per_char[i].width = abc.abcB;	    fs->per_char[i].rbearing = abc.abcB+abc.abcC;		    	}    } else {	for (i=tm.tmFirstChar; i<=tm.tmLastChar; i++)	{	    INT fw;	    if (!GetCharWidth(hdc,i,i,&fw))	    {		fw = tm.tmAveCharWidth;	    }	    fs->per_char[i].lbearing = 0;	    fs->per_char[i].width = fw;	    fs->per_char[i].rbearing = fw;	}    }    if (getCharSetFromName(name,NULL) == DEFAULT_CHARSET)    {	int last = tm.tmLastChar;	switch(tm.tmCharSet) {	    case CHINESEBIG5_CHARSET:	    case GB2312_CHARSET:	    case SHIFTJIS_CHARSET:		if (tm.tmLastChar > 127) last = 127;		break;	}	if (last >= tm.tmFirstChar)	{	    fs->max_bounds = fs->per_char[last];	    fs->min_bounds = fs->per_char[last];	    for (i=tm.tmFirstChar; i<last; i++)	    {		if (fs->per_char[i].lbearing > fs->max_bounds.lbearing)		    fs->max_bounds.lbearing = fs->per_char[i].lbearing;		else if(fs->per_char[i].lbearing < fs->min_bounds.lbearing)		    fs->min_bounds.lbearing = fs->per_char[i].lbearing;		if (fs->per_char[i].width > fs->max_bounds.width)		    fs->max_bounds.width = fs->per_char[i].width;		else if(fs->per_char[i].width < fs->min_bounds.width)		    fs->min_bounds.width = fs->per_char[i].width;		if (fs->per_char[i].rbearing > fs->max_bounds.rbearing)		    fs->max_bounds.rbearing = fs->per_char[i].rbearing;		else if(fs->per_char[i].rbearing < fs->min_bounds.rbearing)		    fs->min_bounds.rbearing = fs->per_char[i].rbearing;	    }	}    }    fs->ascent = tm.tmAscent;    fs->descent= tm.tmDescent;    SelectObject(hdc,old);    ReleaseDC(root,hdc);    return(fs);}XFontStruct *XQueryFont(display, font_id)Display *display;XID     font_id;{	static XFontStruct fs;	xtrace("XQueryFont\n");	return(&fs);}KeySymXKeycodeToKeysym(display, keycode, index)Display *display;unsigned int keycode;int     index;{	xtrace("XKeycodeToKeysym\n");	if (keycode == 254) return XK_Alt_L;	else if (keycode == 255) return XK_Num_Lock;	return(NoSymbol);}KeyCodeXKeysymToKeycode(display, keysym)Display *display;KeySym keysym;{	xtrace("XKeycodeToKeysym\n");	if (keysym == XK_Alt_L) return 254;	else if (keysym == XK_Num_Lock) return 255;	return(0);}KeySymXStringToKeysym(const char *str){	xtrace("XStringToKeysym\n");	return(NoSymbol);}XModifierKeymap *XGetModifierMapping(display)Display *display;{	XModifierKeymap *map = NULL;	xtrace("XGetModifierMapping\n");	map = (XModifierKeymap *)allocateMemory(sizeof(XModifierKeymap));	map->max_keypermod = 1;	map->modifiermap = (KeyCode *)allocateMemory(sizeof(KeyCode)*8);	map->modifiermap[0]=0;	map->modifiermap[1]=0;	map->modifiermap[2]=0;	map->modifiermap[3]=XKeysymToKeycode(display,XK_Alt_L);	map->modifiermap[4]=0;	map->modifiermap[5]=0;	map->modifiermap[6]=0;	map->modifiermap[7]=XKeysymToKeycode(display,XK_Num_Lock);	return(map);}intXFreeModifiermap(XModifierKeymap *modmap){	xtrace("XFreeModifiermap\n");	freeMemory(modmap->modifiermap);	freeMemory(modmap);	return 0;}intXSetFont(display,gc,font)Display *display;GC gc;Font font;{	xtrace("XSetFont\n");	gc->values.font = font;	return 0;}intXSetFontPath(display,dirs,nd)Display *display;char **dirs;int nd;{	xtrace("XSetFontPath\n");	return 0;}/*****************************************************************\	Function: XTextExtents	Inputs:   font structure, string, string length.	Returned: writing direction, max ascent, max descent, font overall		  characteristics.	Comments: The design of windows fonts is similar to X, as far as		  ascent and descent are concerned.  However, they are		  positioned differently on the screen (see XDrawText).\*****************************************************************/static HDC desktopHDC;static int firstTE = TRUE;intXTextExtents(fstruct,str,nc,dir,ascent,descent,overall)XFontStruct *fstruct;const char *str;int nc;int *dir,*ascent,*descent;XCharStruct *overall;{	TEXTMETRIC tmet;	HDC hdc;	SIZE tsize;	HWND desktop;	HFONT old;		xtrace("XTextExtents\n");	if (firstTE)	{		firstTE = FALSE;		desktop=GetDesktopWindow();		desktopHDC=GetDC(desktop);	}	hdc = desktopHDC;	old = SelectObject(hdc, (HFONT)fstruct->fid);	GetTextMetrics(hdc,&tmet);	GetTextExtentPoint(hdc,str,nc,&tsize);	*dir=FontLeftToRight;	*ascent=tmet.tmAscent + 1;	*descent=tmet.tmDescent;	overall->ascent=(short)(tmet.tmAscent + 1);	overall->descent=(short)tmet.tmDescent;	overall->width=(short)tsize.cx;	overall->lbearing=0;	overall->rbearing=(short)tsize.cx;	/* cjh_rel_dc(desktop,hdc);*/	SelectObject(hdc,old);	return 0;}intXTextExtents16(fstruct,str,nc,dir,ascent,descent,overall)XFontStruct *fstruct;const XChar2b *str;int nc;int *dir,*ascent,*descent;XCharStruct *overall;{	xtrace("XTextExtents16\n");	return 0;}/*****************************************************************\	Function: XTextWidth	Inputs:   font structure, string, length of string.	Returned: String width in pixels.	Comments:\*****************************************************************/intXTextWidth(fstruct,str,co)XFontStruct *fstruct;const char *str;int co;{	HDC hdc;	SIZE tsize;	HWND root;	HFONT old;	xtrace("XTextWidth\n");	if(firstTE)	{		firstTE = FALSE;		root=GetDesktopWindow();		hdc=GetDC(root);	}	old = SelectObject(hdc, (HFONT)fstruct->fid);	GetTextExtentPoint(hdc,str,co,&tsize);	SelectObject(hdc,old);	/*cjh_rel_dc(root,hdc);*/	return (tsize.cx);}intXTextWidth16(fstruct,str,co)XFontStruct *fstruct;const XChar2b *str;int co;{	xtrace("XTextWidth16\n");	return 0;}intXGetErrorDatabaseText(display,name,msg,defstr,buf,len)Display *display;const char *name,*msg;const char *defstr;char *buf;int len;{	static char def_err[]="Errors not implemented";	int n;	xtrace("XGetErrorDatabaseText\n");	while (n<len && def_err[n] != 0)		*(buf+n)=def_err[n++];	*(buf+n)=0;	return 0;}intXGetErrorText(display,code,buf,len)Display *display;int code;char *buf;int len;{	xtrace("XGetErrorText\n");	return 0;}XErrorHandlerXSetErrorHandler(handler)XErrorHandler handler;{	xtrace("XSetErrorHandler\n");	return 0;}/*****************************************************************\	Function: XDefaultScreen	Inputs:   display	Returned: default screen number	Comments:\*****************************************************************/intXDefaultScreen(display)Display *display;{	xtrace("XDefaultScreen\n");	return (display->default_screen);}Visual *XDefaultVisual(display, screen)Display *display;int screen;{	xtrace("XDefaultVisual\n");	return DefaultVisual(display, screen);}intXDefaultDepth(display, screen)Display *display;int screen;{	xtrace("XDefaultDepth\n");	return DefaultDepth(display, screen);}ColormapXDefaultColormap(display, screen)Display *display;int screen;{	xtrace("XDefaultColormap\n");	return DefaultColormap(display, screen);}/*****************************************************************\	Function: XScreenOfDisplay	Inputs:   display,screen number	Returned: screen list.	Comments:\*****************************************************************/Screen *XScreenOfDisplay(display,scr)Display *display;int scr;{	xtrace("XScreenOfDisplay\n");	return (display->screens);}CursorXCreateFontCursor(display,shape)Display *display;unsigned int shape;{	xtrace("XCreateFontCursor\n");	return 0;}intXRecolorCursor(display,cursor,fg,bg)Display *display;Cursor cursor;XColor *fg,*bg;{	xtrace("XRecolorCursor\n");	return 0;}/*****************************************************************\	Function: XWarpPointer	Inputs:   display, source window, destination window, source window		  geometry, destination x, y.	Comments: Not knowingly tested.\*****************************************************************/intXWarpPointer(display,sw,dw,sx,sy,swidth,sheight,dx,dy)Display *display;Window sw,dw;int sx,sy;unsigned int swidth,sheight;int dx,dy;{	NT_window *ntsw=(NT_window *)sw;	NT_window *ntdw=(NT_window *)dw;	POINT cpt,tmp;	RECT srct;	HDC hDC;	xtrace("XWarpPointer\n");	GetCursorPos(&cpt);	if (ntsw==None)	{		if (ntdw==None)			SetCursorPos(dx,dy);		else		{			tmp.x=dx;			tmp.y=dy;			ClientToScreen(ntdw->w,&tmp);			SetCursorPos(tmp.x,tmp.y);		}	}	else	{		GetWindowRect(ntsw->w,&srct);		tmp.x=sx;		tmp.y=sy;		ClientToScreen(ntsw->w,&tmp);		if (swidth==0)			swidth=srct.right-sx;		if (sheight==0)			sheight=srct.bottom-sy;		hDC = cjh_get_dc(ntdw);		if (cpt.x>=tmp.x && cpt.x<tmp.x+(int)swidth &&		    cpt.y>=tmp.y && cpt.y<tmp.y+(int)sheight &&		    PtVisible(hDC,cpt.x,cpt.y))		{			if (ntdw==None)				SetCursorPos(cpt.x+dx,cpt.y+dy);			else			{				tmp.x=dx;				tmp.y=dy;				ClientToScreen(ntdw->w,&tmp);				SetCursorPos(tmp.x,tmp.y);			}		}		cjh_rel_dc(ntdw,hDC);	}	return 0;}/*****************************************************************\	Function: XBell	Inputs:   display, percent loudness.	Comments: Don't throw awa

⌨️ 快捷键说明

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