[teklib-general] changeset in /hg/teklib/current: restructered x11_hostopenfont, ...

Franciska Schulze fschulze at neoscientists.org
Mon Nov 26 16:26:13 CET 2007


changeset 589d41c07a17 in /hg/teklib/current
details: http://teklib.org:8001/hg/teklib/current?cmd=changeset;node=589d41c07a17
description:
	restructered x11_hostopenfont, renamed FnNode to fnt_node

diffs (298 lines):

diff -r 0046eb01f6ae -r 589d41c07a17 src/display_x11/display_x11_font.c
--- a/src/display_x11/display_x11_font.c	Tue Oct 02 15:35:53 2007 +0200
+++ b/src/display_x11/display_x11_font.c	Tue Oct 02 15:37:38 2007 +0200
@@ -29,11 +29,9 @@
 
 #define DISABLE_XFT	TFALSE
 
-struct fnt_attr;
-
-/*****************************************************************************/
-static TAPTR hostopenfont_xft(TMOD_X11 *mod, TTAGITEM *tags);
-static TAPTR hostopenfont_xlib(TMOD_X11 *mod, TTAGITEM *tags);
+/*****************************************************************************/
+static TBOOL hostopenfont(TMOD_X11 *mod, struct FontNode *fn,
+	struct fnt_attr *fattr);
 static TVOID hostqueryfonts_xft(TMOD_X11 *mod, struct FontQueryHandle *fqh,
 	struct fnt_attr *fattr);
 static TVOID hostqueryfonts_xlib(TMOD_X11 *mod, struct FontQueryHandle *fqh,
@@ -538,11 +536,11 @@ fnt_getfnnodes(TMOD_X11 *mod, struct TLi
 
 			if (ts)
 			{
-				struct FnNode *fnn;
+				struct fnt_node *fnn;
 
 				TExecCopyMem(exec, fname+p, ts, len);
 
-				fnn = TExecAlloc0(exec, mod->x11_MemMgr, sizeof(struct FnNode));
+				fnn = TExecAlloc0(exec, mod->x11_MemMgr, sizeof(struct fnt_node));
 				if (fnn)
 				{
 					/* add fnnode to fnlist */
@@ -690,68 +688,43 @@ LOCAL TAPTR
 LOCAL TAPTR
 x11_hostopenfont(TMOD_X11 *mod, TTAGITEM *tags)
 {
-	TAPTR font = TNULL;
-
-	if (mod->x11_use_xft == TTRUE)
-		font = hostopenfont_xft(mod, tags);
-	else
-		font = hostopenfont_xlib(mod, tags);
-
-	return font;
-}
-
-static TAPTR
-hostopenfont_xft(TMOD_X11 *mod, TTAGITEM *tags)
-{
-	TINT fpxsize;
-	TBOOL fitalic, fbold, fscale;
-	TSTRPTR fname = TNULL;
+	struct fnt_attr fattr;
 	struct FontNode *fn;
 	TAPTR font = TNULL;
 	TAPTR exec = TGetExecBase(mod);
 
 	/* fetch user specified attributes */
-	fname = (TSTRPTR) TGetTag(tags, TVisual_FontName, (TTAG) FNT_DEFNAME);
-	fpxsize = (TINT) TGetTag(tags, TVisual_FontPxSize, (TTAG) FNT_DEFPXSIZE);
-	fitalic = (TBOOL) TGetTag(tags, TVisual_FontItalic, (TTAG) TFALSE);
-	fbold = (TBOOL) TGetTag(tags, TVisual_FontBold, (TTAG) TFALSE);
-	fscale = (TBOOL) TGetTag(tags, TVisual_FontScaleable, (TTAG) TFALSE);
-
-	if (fname)
-	{
-		/* allocate new fontnode */
+	fattr.fname = (TSTRPTR) TGetTag(tags, TVisual_FontName, (TTAG) FNT_DEFNAME);
+	fattr.fpxsize = (TINT) TGetTag(tags, TVisual_FontPxSize, (TTAG) FNT_DEFPXSIZE);
+	fattr.fitalic = (TBOOL) TGetTag(tags, TVisual_FontItalic, (TTAG) TFALSE);
+	fattr.fbold = (TBOOL) TGetTag(tags, TVisual_FontBold, (TTAG) TFALSE);
+	fattr.fscale = (TBOOL) TGetTag(tags, TVisual_FontScaleable, (TTAG) TFALSE);
+
+	if (fattr.fname)
+	{
 		fn = TExecAlloc0(exec, mod->x11_MemMgr, sizeof(struct FontNode));
 		if (fn)
 		{
 			fn->handle.thn_Owner = mod;
 
-			fn->xftfont = (*mod->x11_xftiface.XftFontOpen)(mod->x11_Display, mod->x11_Screen,
-				XFT_FAMILY, XftTypeString, fname,
-				XFT_PIXEL_SIZE, XftTypeDouble, (TFLOAT)fpxsize,
-				XFT_SLANT, XftTypeInteger, (fitalic ? XFT_SLANT_ITALIC : XFT_SLANT_ROMAN),
-				XFT_WEIGHT, XftTypeInteger, (fbold ? XFT_WEIGHT_BOLD : XFT_WEIGHT_MEDIUM),
-				XFT_SCALABLE, XftTypeBool, fscale,
-				XFT_ENCODING, XftTypeString, FNT_DEFREGENC,
-				XFT_ANTIALIAS, XftTypeBool, TTRUE, NULL);
-
-			if (fn->xftfont)
-			{
-				/* save font attributes */
-				fn->pxsize = fpxsize;
-				if (fitalic)
+			if (hostopenfont(mod, fn, &fattr))
+			{
+				/* load succeeded, save font attributes */
+				fn->pxsize = fattr.fpxsize;
+				if (fattr.fitalic)
 					fn->attr = FNT_ITALIC;
-				if (fbold)
+				if (fattr.fbold)
 					fn->attr |= FNT_BOLD;
 
 				/* append to the list of open fonts */
-				TDBPRINTF(10, ("O '%s' %dpx\n", fname, fpxsize));
+				TDBPRINTF(10, ("O '%s' %dpx\n", fattr.fname, fattr.fpxsize));
 				TAddTail(&mod->x11_fm.openfonts, &fn->handle.thn_Node);
 				font = (TAPTR)fn;
 			}
 			else
 			{
-				/* query failed, free fontnode */
-				TDBPRINTF(10, ("X unable to load '%s'\n", fname));
+				/* load failed, free fontnode */
+				TDBPRINTF(10, ("X unable to load '%s'\n", fattr.fname));
 				TExecFree(exec, fn);
 			}
 		}
@@ -759,82 +732,66 @@ hostopenfont_xft(TMOD_X11 *mod, TTAGITEM
 			TDBPRINTF(20, ("out of memory :(\n"));
 	}
 	else
-		TDBPRINTF(20, ("X invalid fontname '%s' specified\n", fname));
+		TDBPRINTF(20, ("X invalid fontname '%s' specified\n", fattr.fname));
 
 	return font;
 }
 
-static TAPTR
-hostopenfont_xlib(TMOD_X11 *mod, TTAGITEM *tags)
-{
-	TINT fpxsize;
-	TBOOL fitalic, fbold;
-	TSTRPTR fname = TNULL;
-	TSTRPTR fquery = TNULL;
-	struct FontNode *fn;
-	TAPTR font = TNULL;
+static TBOOL
+hostopenfont(TMOD_X11 *mod, struct FontNode *fn, struct fnt_attr *fattr)
+{
+	TBOOL succ = TFALSE;
 	TAPTR exec = TGetExecBase(mod);
 
-	/* fetch user specified attributes */
-	fname = (TSTRPTR) TGetTag(tags, TVisual_FontName, (TTAG) FNT_DEFNAME);
-	fpxsize = (TINT) TGetTag(tags, TVisual_FontPxSize, (TTAG) FNT_DEFPXSIZE);
-	fitalic = (TBOOL) TGetTag(tags, TVisual_FontItalic, (TTAG) TFALSE);
-	fbold = (TBOOL) TGetTag(tags, TVisual_FontBold, (TTAG) TFALSE);
-
-	if (fname)
-		fquery = TExecAlloc0(exec, mod->x11_MemMgr, FNT_LENGTH + strlen(fname));
+	if (mod->x11_use_xft == TTRUE)
+	{
+		/* load xft font */
+		fn->xftfont = (*mod->x11_xftiface.XftFontOpen)(
+			mod->x11_Display,
+			mod->x11_Screen,
+			XFT_FAMILY, XftTypeString, fattr->fname,
+			XFT_PIXEL_SIZE, XftTypeDouble, (TFLOAT)fattr->fpxsize,
+			XFT_SLANT, XftTypeInteger,
+				(fattr->fitalic ? XFT_SLANT_ITALIC : XFT_SLANT_ROMAN),
+			XFT_WEIGHT, XftTypeInteger,
+				(fattr->fbold ? XFT_WEIGHT_BOLD : XFT_WEIGHT_MEDIUM),
+			XFT_SCALABLE, XftTypeBool, fattr->fscale,
+			XFT_ENCODING, XftTypeString, FNT_DEFREGENC,
+			XFT_ANTIALIAS, XftTypeBool, TTRUE, NULL);
+
+		if (fn->xftfont)
+			succ = TTRUE;
+	}
 	else
-		TDBPRINTF(20, ("X invalid fontname '%s' specified\n", fname));
-
-	if (fquery)
-	{
-		/* build fontquery name */
-		sprintf(fquery, "-*-%s-%s-%s-*-*-%d-*-*-*-*-*-%s",
-			fname,
-			fbold ? FNT_WGHT_BOLD : FNT_WGHT_MEDIUM,
-			fitalic ? FNT_SLANT_I : FNT_SLANT_R,
-			fpxsize,
-			FNT_DEFREGENC
-		);
-
-		TDBPRINTF(10, ("? %s\n", fquery));
-
-		/* allocate new font node */
-		fn = TExecAlloc0(exec, mod->x11_MemMgr, sizeof(struct FontNode));
-		if (fn)
-		{
-			fn->handle.thn_Owner = mod;
+	{
+		/* load xlib font */
+		TSTRPTR fquery = TExecAlloc0(exec, mod->x11_MemMgr,
+			FNT_LENGTH + strlen(fattr->fname));
+
+		if (fquery)
+		{
+			sprintf(fquery, "-*-%s-%s-%s-*-*-%d-*-*-*-*-*-%s",
+				fattr->fname,
+				fattr->fbold ? FNT_WGHT_BOLD : FNT_WGHT_MEDIUM,
+				fattr->fitalic ? FNT_SLANT_I : FNT_SLANT_R,
+				fattr->fpxsize,
+				FNT_DEFREGENC
+			);
+
+			TDBPRINTF(10, ("? %s\n", fquery));
+
 			fn->font = XLoadQueryFont(mod->x11_Display, fquery);
+
 			if (fn->font)
-			{
-				/* save font attributes */
-				fn->pxsize = fpxsize;
-				if (fitalic)
-					fn->attr = FNT_ITALIC;
-				if (fbold)
-					fn->attr |= FNT_BOLD;
-
-				/* append to the list of open fonts */
-				TDBPRINTF(10, ("O '%s' %dpx\n", fname, fpxsize));
-				TAddTail(&mod->x11_fm.openfonts, &fn->handle.thn_Node);
-				font = (TAPTR)fn;
-			}
-			else
-			{
-				/* query failed, free font node */
-				TDBPRINTF(10, ("X unable to load '%s'\n", fname));
-				TExecFree(exec, fn);
-			}
+				succ = TTRUE;
+
+			TExecFree(exec, fquery);
 		}
 		else
 			TDBPRINTF(20, ("out of memory :(\n"));
-
-		TExecFree(exec, fquery);
-	}
-	else
-		TDBPRINTF(20, ("out of memory :(\n"));
-
-	return font;
+	}
+
+	return succ;
 }
 
 /*****************************************************************************/
@@ -888,16 +845,6 @@ hostopenfont_xlib(TMOD_X11 *mod, TTAGITE
 **	 to "iso8859-1", it can be changed in visual_font.h
 */
 
-struct fnt_attr
-{
-	struct TList fnlist;	/* list of fontnames */
-	TINT  fpxsize;
-	TBOOL fitalic;
-	TBOOL fbold;
-	TBOOL fscale;
-	TINT  fnum;
-};
-
 LOCAL TAPTR
 x11_hostqueryfonts(TMOD_X11 *mod, TTAGITEM *tags)
 {
@@ -945,10 +892,10 @@ x11_hostqueryfonts(TMOD_X11 *mod, TTAGIT
 	else
 		TDBPRINTF(20, ("out of memory :(\n"));
 
-	/* free memory of FnNodes */
+	/* free memory of fnt_nodes */
 	for (node = fattr.fnlist.tlh_Head; (next = node->tln_Succ); node = next)
 	{
-		struct FnNode *fnn = (struct FnNode *)node;
+		struct fnt_node *fnn = (struct fnt_node *)node;
 		TExecFree(exec, fnn->fname);
 		TRemove(&fnn->node);
 		TExecFree(exec, fnn);
@@ -969,7 +916,7 @@ hostqueryfonts_xft(TMOD_X11 *mod, struct
 	{
 		FcResult result;
 		FcFontSet *fontset = TNULL;
-		struct FnNode *fnn = (struct FnNode *)node;
+		struct fnt_node *fnn = (struct fnt_node *)node;
 
 		/* create a pattern to match fontname */
 		pattern = (*mod->x11_fciface.FcPatternBuild)(0,
@@ -1093,7 +1040,7 @@ hostqueryfonts_xlib(TMOD_X11 *mod, struc
 	for (node = fattr->fnlist.tlh_Head; (next = node->tln_Succ); node = next)
 	{
 		TINT i, numfonts = 0;
-		struct FnNode *fnn = (struct FnNode *)node;
+		struct fnt_node *fnn = (struct fnt_node *)node;
 
 		if (fnn->fname)
 		{


More information about the teklib-general mailing list