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

📄 pw_text.c

📁 操作系统SunOS 4.1.3版本的源码
💻 C
字号:
#ifndef lint#ifdef sccsstatic	char sccsid[] = "@(#)pw_text.c 1.1 92/07/30 Copyr 1985 Sun Micro";#endif#endif/* * Copyright (c) 1985 by Sun Microsystems, Inc. *//* * Pw_text.c: Implement the pw_char & pw_text functions *	of the pixwin.h interface. */#include <sys/types.h>#include <pixrect/pixrect.h>#include <pixrect/pixfont.h>#include <sunwindow/rect.h>#include <sunwindow/rectlist.h>#include <sunwindow/cms.h>#include <sunwindow/pixwin.h>#include <sunwindow/pw_util.h>PIXFONT	*pf_sys;int	pf_syscount;extern	pf_ttext(), pf_text();static	int (*pf_textop)() = pf_text;	/* toggle between pf_text& pf_ttext */pw_char(pw, xw, yw, op, pixfont, c)	struct	pixwin *pw;	int	op, xw, yw;	char	c;	struct	pixfont *pixfont;{	char	s[2];	s[0] = c;	s[1] = 0;	(void)pw_text(pw, xw, yw, op, pixfont, s);}pw_ttext(pw, xbasew, ybasew, op, pixfont, s)	struct	pixwin *pw;	int	op, xbasew, ybasew;	char	*s;	struct	pixfont *pixfont;{	pf_textop = pf_ttext;	(void)pw_text(pw, xbasew, ybasew, op, pixfont, s);	pf_textop = pf_text;}pw_text(pw, xbasew, ybasew, op, pixfont, s)	register struct	pixwin *pw;	int	op;	register int	xbasew, ybasew;	char	*s;	struct	pixfont *pixfont;{	struct	rect rclipstruct, rdeststruct;	register struct	rect *rclip = &rclipstruct, *rdest = &rdeststruct;	register int	yhomew, xhomew;	register struct	pixwin_prlist *prl;	int	len = strlen(s);	struct	pr_size strsize;	extern	struct pr_size pf_textwidth();	struct pr_prpos prpos;	if (len == 0) return;	/*	 * NULL pixfont mean use pf_sys.	 */	if (pixfont == 0) {		PIXFONT *pw_pfnull();		pixfont = pw_pfnull(pixfont);	}	/* Translate destination */	xbasew = PW_X_OFFSET(pw, xbasew);	ybasew = PW_Y_OFFSET(pw, ybasew);	/*	 * Construct window relative rectangle that will be written to	 */	yhomew = ybasew+pixfont->pf_char[(unsigned char)s[0]].pc_home.y;	xhomew = xbasew+pixfont->pf_char[(unsigned char)s[0]].pc_home.x;	strsize = pf_textwidth(len, pixfont, s);	PW_SETUP(pw, rdeststruct, DoDraw,	    xhomew, yhomew, strsize.x, strsize.y);	if (op & PIX_DONTCLIP) {		prpos.pr = pw->pw_clipdata->pwcd_prmulti;		prpos.pos.x = xbasew;		prpos.pos.y = ybasew;		pf_textop(prpos,op,pixfont,s);		goto TryRetained;	}	for (prl = pw->pw_clipdata->pwcd_prl;prl;prl = prl->prl_next) {		rect_construct(rclip, prl->prl_x, prl->prl_y,		    prl->prl_pixrect->pr_width, prl->prl_pixrect->pr_height);		if (rect_includesrect(rclip, rdest)) {			prpos.pr = prl->prl_pixrect;			prpos.pos.x = xbasew-prl->prl_x;			prpos.pos.y = ybasew-prl->prl_y;			pf_textop(prpos,			    op|PIX_DONTCLIP, pixfont, s);			break;		} else  {			prpos.pr = prl->prl_pixrect;			prpos.pos.x = xbasew-prl->prl_x;			prpos.pos.y = ybasew-prl->prl_y;			pf_textop(prpos,			    op&(~PIX_DONTCLIP), pixfont, s);		}	}TryRetained:	(void)pw_unlock(pw);DoDraw:	if (pw->pw_prretained) {		prpos.pr = pw->pw_prretained;		prpos.pos.x = PW_RETAIN_X_OFFSET(pw,xbasew);		prpos.pos.y = PW_RETAIN_Y_OFFSET(pw,ybasew);		pf_textop(prpos,op,pixfont,s);	}	return;}/* * Shared system pixfont. */PIXFONT *pw_pfsysopen(){	if (pf_sys == 0) {		pf_sys = pf_open((char *)0);		if (pf_sys == 0)			return(0);		pf_syscount = 1;	} else		pf_syscount++;	return(pf_sys);}pw_pfsysclose(){	pf_syscount--;	if (pf_syscount <= 0 && pf_sys) {		(void)pf_close(pf_sys);		pf_syscount = 0;		pf_sys = (PIXFONT *) 0;	}}/* * Convert font handle into default font handle if original is * null.  Will increment ref count on default font handle only * if not already open.  This is meant as a handy utility for * handling null font handles passed at you. * * One should really call pw_pfsysopen directly if you want * to get and hold onto the default font handle so that the * reference counts are maintained correctly. */PIXFONT *pw_pfnull(font)	PIXFONT *font;{	if (font == (PIXFONT *)0) {		if (pf_sys == 0 && pw_pfsysopen() == (PIXFONT *)0)			return((PIXFONT *)0);		font = pf_sys;	}	return(font);}

⌨️ 快捷键说明

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