[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