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

📄 fontdir.c

📁 unix vnc 协议源码. VNC是一款远程控制工具软件.
💻 C
📖 第 1 页 / 共 2 页
字号:
    char    *n;    n = (char *) xalloc (strlen (s) + 1);    if (!n)	return 0;    strcpy (n, s);    return n;}FontEntryPtrFontFileFindNameInScalableDir(table, pat, vals)    FontTablePtr    table;    FontNamePtr	    pat;    FontScalablePtr	vals;{    int         i,                start,                stop,                res,                private;    FontNamePtr	name;    if ((i = SetupWildMatch(table, pat, &start, &stop, &private)) >= 0)	return &table->entries[i];    for (i = start; i < stop; i++) {	name = &table->entries[i].name;	res = PatternMatch(pat->name, private, name->name, name->ndashes);	if (res > 0)	{	    /* Check to see if enhancements requested are available */	    if (vals)	    {		int vs = vals->values_supplied;		int cap;		if (table->entries[i].type == FONT_ENTRY_SCALABLE)		    cap = table->entries[i].u.scalable.renderer->capabilities;		else if (table->entries[i].type == FONT_ENTRY_ALIAS)		    cap = ~0;	/* Calling code will have to see if true */		else		    cap = 0;		if (((vs & PIXELSIZE_MASK) == PIXELSIZE_ARRAY ||		     (vs & POINTSIZE_MASK) == POINTSIZE_ARRAY) &&		    !(cap & CAP_MATRIX) ||		    (vs & CHARSUBSET_SPECIFIED) &&		    !(cap & CAP_CHARSUBSETTING))		    continue;	    }	    return &table->entries[i];	}	if (res < 0)	    break;    }    return (FontEntryPtr)0;}FontEntryPtrFontFileFindNameInDir(table, pat)    FontTablePtr    table;    FontNamePtr	    pat;{    return FontFileFindNameInScalableDir(table, pat, (FontScalablePtr)0);}FontFileFindNamesInScalableDir(table, pat, max, names, vals,			       alias_behavior, newmax)    FontTablePtr    table;    FontNamePtr	    pat;    int		    max;    FontNamesPtr    names;    FontScalablePtr	vals;    int		    alias_behavior;    int		   *newmax;{    int		    i,		    start,		    stop,		    res,		    private;    int		    ret = Successful;    FontEntryPtr    fname;    FontNamePtr	    name;    if (max <= 0)	return Successful;    if ((i = SetupWildMatch(table, pat, &start, &stop, &private)) >= 0) {	if (alias_behavior == NORMAL_ALIAS_BEHAVIOR ||	    table->entries[i].type != FONT_ENTRY_ALIAS)	{	    name = &table->entries[i].name;	    if (newmax) *newmax = max - 1;	    return AddFontNamesName(names, name->name, name->length);	}	start = i;	stop = i + 1;    }    for (i = start, fname = &table->entries[start]; i < stop; i++, fname++) {	res = PatternMatch(pat->name, private, fname->name.name, fname->name.ndashes);	if (res > 0) {	    if (vals)	    {		int vs = vals->values_supplied;		int cap;		if (fname->type == FONT_ENTRY_SCALABLE)		    cap = fname->u.scalable.renderer->capabilities;		else if (fname->type == FONT_ENTRY_ALIAS)		    cap = ~0;	/* Calling code will have to see if true */		else		    cap = 0;		if (((vs & PIXELSIZE_MASK) == PIXELSIZE_ARRAY ||		     (vs & POINTSIZE_MASK) == POINTSIZE_ARRAY) &&		    !(cap & CAP_MATRIX) ||		    (vs & CHARSUBSET_SPECIFIED) &&		    !(cap & CAP_CHARSUBSETTING))		    continue;	    }	    if ((alias_behavior & IGNORE_SCALABLE_ALIASES) &&		fname->type == FONT_ENTRY_ALIAS)	    {		FontScalableRec	tmpvals;		if (FontParseXLFDName (fname->name.name, &tmpvals,				       FONT_XLFD_REPLACE_NONE) &&		    !(tmpvals.values_supplied & SIZE_SPECIFY_MASK))		    continue;	    }	    ret = AddFontNamesName(names, fname->name.name, fname->name.length);	    if (ret != Successful)		goto bail;	    /* If alias_behavior is LIST_ALIASES_AND_TARGET_NAMES, mark	       this entry as an alias by negating its length and follow	       it by the resolved name */	    if ((alias_behavior & LIST_ALIASES_AND_TARGET_NAMES) &&		fname->type == FONT_ENTRY_ALIAS)	    {		names->length[names->nnames - 1] =		    -names->length[names->nnames - 1];		ret = AddFontNamesName(names, fname->u.alias.resolved,				       strlen(fname->u.alias.resolved));		if (ret != Successful)		    goto bail;	    }	    if (--max <= 0)		break;	} else if (res < 0)	    break;    }  bail: ;    if (newmax) *newmax = max;    return ret;}intFontFileFindNamesInDir(table, pat, max, names)    FontTablePtr    table;    FontNamePtr	    pat;    int		    max;    FontNamesPtr    names;{    return FontFileFindNamesInScalableDir(table, pat, max, names,					  (FontScalablePtr)0,					  NORMAL_ALIAS_BEHAVIOR, (int *)0);}BoolFontFileMatchName(name, length, pat)    char	*name;    int		length;    FontNamePtr	pat;{    /* Perform a fontfile-type name match on a single name */    FontTableRec table;    FontEntryRec entries[1];    /* Dummy up a table */    table.used = 1;    table.size = 1;    table.sorted = TRUE;    table.entries = entries;    entries[0].name.name = name;    entries[0].name.length = length;    entries[0].name.ndashes = FontFileCountDashes(name, length);    return FontFileFindNameInDir(&table, pat) != (FontEntryPtr)0;}/* * Add a font file to a directory.  This handles bitmap and * scalable names both */BoolFontFileAddFontFile (dir, fontName, fileName)    FontDirectoryPtr	dir;    char		*fontName;    char		*fileName;{    FontEntryRec	    entry;    FontScalableRec	    vals, zeroVals;    FontRendererPtr	    renderer;    FontEntryPtr	    existing;    FontScalableExtraPtr    extra;    FontEntryPtr	    bitmap, scalable;    Bool		    isscale;    renderer = FontFileMatchRenderer (fileName);    if (!renderer)	return FALSE;    entry.name.length = strlen (fontName);    if (entry.name.length > MAXFONTNAMELEN)	entry.name.length = MAXFONTNAMELEN;    entry.name.name = fontName;    CopyISOLatin1Lowered (entry.name.name, fontName, entry.name.length);    entry.name.ndashes = FontFileCountDashes (entry.name.name, entry.name.length);    entry.name.name[entry.name.length] = '\0';    /*     * Add a bitmap name if the incoming name isn't an XLFD name, or     * if it isn't a scalable name (i.e. non-zero scalable fields)     *     * If name of bitmapped font contains XLFD enhancements, do not add     * a scalable version of the name... this can lead to confusion and     * ambiguity between the font name and the field enhancements.     */    isscale = entry.name.ndashes == 14 &&	      FontParseXLFDName(entry.name.name,				&vals, FONT_XLFD_REPLACE_NONE) &&	      (vals.values_supplied & PIXELSIZE_MASK) != PIXELSIZE_ARRAY &&	      (vals.values_supplied & POINTSIZE_MASK) != POINTSIZE_ARRAY &&	      !(vals.values_supplied & ENHANCEMENT_SPECIFY_MASK);#ifdef FONTDIRATTRIB#define UNSCALED_ATTRIB "unscaled"    /* For scalable fonts, check if the "unscaled" attribute is present */    if (isscale && dir->attributes && dir->attributes[0] == ':') {	char *ptr1 = dir->attributes + 1;	char *ptr2;	int length;	int uslength = strlen(UNSCALED_ATTRIB);	do {	    ptr2 = strchr(ptr1, ':');	    if (ptr2)		length = ptr2 - ptr1;	    else		length = dir->attributes + strlen(dir->attributes) - ptr1;	    if (length == uslength && !strncmp(ptr1, UNSCALED_ATTRIB, uslength))		isscale = FALSE;	    if (ptr2)		ptr1 = ptr2 + 1;	} while (ptr2);    }#endif    if (!isscale || (vals.values_supplied & SIZE_SPECIFY_MASK))    {      /* If the fontname says it is nonScalable, make sure that the       * renderer supports OpenBitmap and GetInfoBitmap.       */      if (renderer->OpenBitmap && renderer->GetInfoBitmap)      {	entry.type = FONT_ENTRY_BITMAP;	entry.u.bitmap.renderer = renderer;	entry.u.bitmap.pFont = NullFont;	if (!(entry.u.bitmap.fileName = FontFileSaveString (fileName)))	    return FALSE;	if (!(bitmap = FontFileAddEntry (&dir->nonScalable, &entry)))	{	    xfree (entry.u.bitmap.fileName);	    return FALSE;	}      }    }    /*     * Parse out scalable fields from XLFD names - a scalable name     * just gets inserted, a scaled name has more things to do.     */    if (isscale)    {      /* If the fontname says it is scalable, make sure that the       * renderer supports OpenScalable and GetInfoScalable.       */      if (renderer->OpenScalable && renderer->GetInfoScalable)      {	if (vals.values_supplied & SIZE_SPECIFY_MASK)	{	    bzero((char *)&zeroVals, sizeof(zeroVals));	    zeroVals.x = vals.x;	    zeroVals.y = vals.y;	    zeroVals.values_supplied = PIXELSIZE_SCALAR | POINTSIZE_SCALAR;	    FontParseXLFDName (entry.name.name, &zeroVals,			       FONT_XLFD_REPLACE_VALUE);	    entry.name.length = strlen (entry.name.name);	    existing = FontFileFindNameInDir (&dir->scalable, &entry.name);	    if (existing)	    {		if ((vals.values_supplied & POINTSIZE_MASK) ==			POINTSIZE_SCALAR &&		    (int)(vals.point_matrix[3] * 10) == GetDefaultPointSize())		{		    existing->u.scalable.extra->defaults = vals;		    xfree (existing->u.scalable.fileName);		    if (!(existing->u.scalable.fileName = FontFileSaveString (fileName)))			return FALSE;		}		FontFileCompleteXLFD(&vals, &vals);		FontFileAddScaledInstance (existing, &vals, NullFont,					   bitmap->name.name);		return TRUE;	    }	}	if (!(entry.u.scalable.fileName = FontFileSaveString (fileName)))	    return FALSE;	extra = (FontScalableExtraPtr) xalloc (sizeof (FontScalableExtraRec));	if (!extra)	{	    xfree (entry.u.scalable.fileName);	    return FALSE;	}	bzero((char *)&extra->defaults, sizeof(extra->defaults));	if ((vals.values_supplied & POINTSIZE_MASK) == POINTSIZE_SCALAR &&	    (int)(vals.point_matrix[3] * 10) == GetDefaultPointSize())	    extra->defaults = vals;	else	{	    FontResolutionPtr resolution;	    int num;	    extra->defaults.point_matrix[0] =		extra->defaults.point_matrix[3] =		    (double)GetDefaultPointSize() / 10.0;	    extra->defaults.point_matrix[1] =		extra->defaults.point_matrix[2] = 0.0;	    extra->defaults.values_supplied =		POINTSIZE_SCALAR | PIXELSIZE_UNDEFINED;	    extra->defaults.width = -1;	    if (vals.x <= 0 || vals.y <= 0)	    {	        resolution = GetClientResolutions (&num);	        if (resolution && num > 0)	        {	    	    extra->defaults.x = resolution->x_resolution;	    	    extra->defaults.y = resolution->y_resolution;	        }	        else	        {		    extra->defaults.x = 75;		    extra->defaults.y = 75;	        }	     }	     else 	     {		extra->defaults.x = vals.x;		extra->defaults.y = vals.y;	     }	     FontFileCompleteXLFD (&extra->defaults, &extra->defaults);	}	extra->numScaled = 0;	extra->sizeScaled = 0;	extra->scaled = 0;	extra->private = 0;	entry.type = FONT_ENTRY_SCALABLE;	entry.u.scalable.renderer = renderer;	entry.u.scalable.extra = extra;	if (!(scalable = FontFileAddEntry (&dir->scalable, &entry)))	{	    xfree (extra);	    xfree (entry.u.scalable.fileName);	    return FALSE;	}	if (vals.values_supplied & SIZE_SPECIFY_MASK)	{	    FontFileCompleteXLFD(&vals, &vals);	    FontFileAddScaledInstance (scalable, &vals, NullFont,				       bitmap->name.name);	}      }    }    return TRUE;}BoolFontFileAddFontAlias (dir, aliasName, fontName)    FontDirectoryPtr	dir;    char		*aliasName;    char		*fontName;{    FontEntryRec	entry;    entry.name.length = strlen (aliasName);    CopyISOLatin1Lowered (aliasName, aliasName, entry.name.length);    entry.name.name = aliasName;    entry.name.ndashes = FontFileCountDashes (entry.name.name, entry.name.length);    entry.type = FONT_ENTRY_ALIAS;    if (!(entry.u.alias.resolved = FontFileSaveString (fontName)))	return FALSE;    if (!FontFileAddEntry (&dir->nonScalable, &entry))    {	xfree (entry.u.alias.resolved);	return FALSE;    }    return TRUE;}

⌨️ 快捷键说明

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