|
Packit |
b099d7 |
/* $XConsortium: XmFontList.c /main/16 1996/11/20 15:15:34 drk $ */
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Motif
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* Copyright (c) 1987-2012, The Open Group. All rights reserved.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* These libraries and programs are free software; you can
|
|
Packit |
b099d7 |
* redistribute them and/or modify them under the terms of the GNU
|
|
Packit |
b099d7 |
* Lesser General Public License as published by the Free Software
|
|
Packit |
b099d7 |
* Foundation; either version 2 of the License, or (at your option)
|
|
Packit |
b099d7 |
* any later version.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* These libraries and programs are distributed in the hope that
|
|
Packit |
b099d7 |
* they will be useful, but WITHOUT ANY WARRANTY; without even the
|
|
Packit |
b099d7 |
* implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
|
Packit |
b099d7 |
* PURPOSE. See the GNU Lesser General Public License for more
|
|
Packit |
b099d7 |
* details.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* You should have received a copy of the GNU Lesser General Public
|
|
Packit |
b099d7 |
* License along with these librararies and programs; if not, write
|
|
Packit |
b099d7 |
* to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
|
|
Packit |
b099d7 |
* Floor, Boston, MA 02110-1301 USA
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* HISTORY
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
#ifdef HAVE_CONFIG_H
|
|
Packit |
b099d7 |
#include <config.h>
|
|
Packit |
b099d7 |
#endif
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
#include <stdio.h>
|
|
Packit |
b099d7 |
#ifndef X_NOT_STDC_ENV
|
|
Packit |
b099d7 |
#include <stdlib.h>
|
|
Packit |
b099d7 |
#endif
|
|
Packit |
b099d7 |
#include <string.h>
|
|
Packit |
b099d7 |
#include <ctype.h>
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
#ifdef __cplusplus
|
|
Packit |
b099d7 |
extern "C" { /* some 'locale.h' do not have prototypes (sun) */
|
|
Packit |
b099d7 |
#endif
|
|
Packit |
b099d7 |
#include <X11/Xlocale.h>
|
|
Packit |
b099d7 |
#ifdef __cplusplus
|
|
Packit |
b099d7 |
} /* Close scope of 'extern "C"' declaration */
|
|
Packit |
b099d7 |
#endif /* __cplusplus */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
#include <Xm/AtomMgr.h>
|
|
Packit |
b099d7 |
#include <Xm/XmosP.h>
|
|
Packit |
b099d7 |
#include "XmI.h"
|
|
Packit |
b099d7 |
#include "XmRenderTI.h"
|
|
Packit |
b099d7 |
#include "XmStringI.h"
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
#define FIX_1252
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Data structure macros for fontlist access
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
#define FLContextIndex(context) (((XmFontListContextRec *)(context))->index)
|
|
Packit |
b099d7 |
#define FLContextTable(context) (((XmFontListContextRec *)(context))->table)
|
|
Packit |
b099d7 |
#define FLContextError(context) (((XmFontListContextRec *)(context))->error)
|
|
Packit |
b099d7 |
#define FLDisplay(fl) ((*fl)->display)
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/******** Static Function Declarations ********/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/******** End Static Function Declarations ********/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* NOTE - this function XmFontListEntryCreate is NOT MT-safe if the
|
|
Packit |
b099d7 |
application is using threads with multiple application contexts
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
to use Font lists in threaded code with multiple application contexts
|
|
Packit |
b099d7 |
it is necessary to use the new API XmFontListEntryCreate_r function
|
|
Packit |
b099d7 |
which passes in an additional widget parameter ... this widget
|
|
Packit |
b099d7 |
MUST be for the display that font will be used in
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
Font should not be shared between displays in an MT environment */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XmFontListEntry
|
|
Packit |
b099d7 |
XmFontListEntryCreate(
|
|
Packit |
b099d7 |
char *tag,
|
|
Packit |
b099d7 |
XmFontType type ,
|
|
Packit |
b099d7 |
XtPointer font )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
char *derived_tag;
|
|
Packit |
b099d7 |
Cardinal n;
|
|
Packit |
b099d7 |
Arg args[4];
|
|
Packit |
b099d7 |
XmFontListEntry ret_val;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
_XmProcessLock();
|
|
Packit |
b099d7 |
if ((font == NULL) || (tag == NULL) ||
|
|
Packit |
b099d7 |
((type != XmFONT_IS_FONTSET) && (type != XmFONT_IS_FONT))) {
|
|
Packit |
b099d7 |
_XmProcessUnlock();
|
|
Packit |
b099d7 |
return (NULL);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if ((tag != XmFONTLIST_DEFAULT_TAG) &&
|
|
Packit |
b099d7 |
(strcmp(tag, XmSTRING_DEFAULT_CHARSET) == 0))
|
|
Packit |
b099d7 |
derived_tag = _XmStringGetCurrentCharset();
|
|
Packit |
b099d7 |
else derived_tag = tag;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
n = 0;
|
|
Packit |
b099d7 |
XtSetArg(args[n], XmNfontType, type); n++;
|
|
Packit |
b099d7 |
XtSetArg(args[n], XmNloadModel, XmLOAD_IMMEDIATE); n++;
|
|
Packit |
b099d7 |
XtSetArg(args[n], XmNfont, font); n++;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
ret_val =
|
|
Packit |
b099d7 |
XmRenditionCreate(NULL,
|
|
Packit |
b099d7 |
_XmStringCacheTag(derived_tag, XmSTRING_TAG_STRLEN),
|
|
Packit |
b099d7 |
args, n);
|
|
Packit |
b099d7 |
_XmProcessUnlock();
|
|
Packit |
b099d7 |
return ret_val;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* MT safe version of XmFontList - requires widget parameter
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* A display variable is necessary to create a render table in an
|
|
Packit |
b099d7 |
* MT safe environment
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* the widget passed in DOES NOT need to be the widget which uses the
|
|
Packit |
b099d7 |
* font however it MUST be on the same display
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* Fonts can not be shared among displays in an MT environment
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XmFontListEntry
|
|
Packit |
b099d7 |
XmFontListEntryCreate_r(char *tag,
|
|
Packit |
b099d7 |
XmFontType type,
|
|
Packit |
b099d7 |
XtPointer font,
|
|
Packit |
b099d7 |
Widget wid )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
char *derived_tag;
|
|
Packit |
b099d7 |
Cardinal n;
|
|
Packit |
b099d7 |
Arg args[4];
|
|
Packit |
b099d7 |
XmFontListEntry ret_val;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
_XmWidgetToAppContext(wid);
|
|
Packit |
b099d7 |
_XmAppLock(app);
|
|
Packit |
b099d7 |
if ((font == NULL) || (tag == NULL) ||
|
|
Packit |
b099d7 |
((type != XmFONT_IS_FONTSET) && (type != XmFONT_IS_FONT)))
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
_XmAppUnlock(app);
|
|
Packit |
b099d7 |
return (NULL);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if ((tag != XmFONTLIST_DEFAULT_TAG) &&
|
|
Packit |
b099d7 |
(strcmp(tag, XmSTRING_DEFAULT_CHARSET) == 0))
|
|
Packit |
b099d7 |
derived_tag = _XmStringGetCurrentCharset();
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
derived_tag = tag;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
n = 0;
|
|
Packit |
b099d7 |
XtSetArg(args[n], XmNfontType, type); n++;
|
|
Packit |
b099d7 |
XtSetArg(args[n], XmNloadModel, XmLOAD_IMMEDIATE); n++;
|
|
Packit |
b099d7 |
XtSetArg(args[n], XmNfont, font); n++;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
ret_val =
|
|
Packit |
b099d7 |
XmRenditionCreate(wid,
|
|
Packit |
b099d7 |
_XmStringCacheTag(derived_tag, XmSTRING_TAG_STRLEN),
|
|
Packit |
b099d7 |
args, n);
|
|
Packit |
b099d7 |
_XmAppUnlock(app);
|
|
Packit |
b099d7 |
return ret_val;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
void
|
|
Packit |
b099d7 |
XmFontListEntryFree(
|
|
Packit |
b099d7 |
XmFontListEntry *entry )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
if (entry != NULL) XmRenditionFree(*entry);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XtPointer
|
|
Packit |
b099d7 |
XmFontListEntryGetFont(
|
|
Packit |
b099d7 |
XmFontListEntry entry ,
|
|
Packit |
b099d7 |
XmFontType *typeReturn )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XtPointer ret_val;
|
|
Packit |
b099d7 |
#ifdef USE_XFT
|
|
Packit |
b099d7 |
XtPointer ret_val2;
|
|
Packit |
b099d7 |
#endif
|
|
Packit |
b099d7 |
Arg args[3];
|
|
Packit |
b099d7 |
Cardinal n;
|
|
Packit |
b099d7 |
XtAppContext app=NULL;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (entry == NULL)
|
|
Packit |
b099d7 |
return (NULL);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
#ifdef XTHREADS
|
|
Packit |
b099d7 |
if ( _XmRendDisplay((XmRendition)entry) )
|
|
Packit |
b099d7 |
app = XtDisplayToApplicationContext(_XmRendDisplay((XmRendition)entry));
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (app)
|
|
Packit |
b099d7 |
_XmAppLock(app);
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
_XmProcessLock();
|
|
Packit |
b099d7 |
#endif
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
n = 0;
|
|
Packit |
b099d7 |
XtSetArg(args[n], XmNfontType, typeReturn); n++;
|
|
Packit |
b099d7 |
XtSetArg(args[n], XmNfont, &ret_val); n++;
|
|
Packit |
b099d7 |
#ifdef USE_XFT
|
|
Packit |
b099d7 |
XtSetArg(args[n], XmNxftFont, &ret_val2); n++;
|
|
Packit |
b099d7 |
#endif
|
|
Packit |
b099d7 |
XmRenditionRetrieve(entry, args, n);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
#ifdef USE_XFT
|
|
Packit |
b099d7 |
if (*typeReturn == XmFONT_IS_XFT)
|
|
Packit |
b099d7 |
ret_val = ret_val2;
|
|
Packit |
b099d7 |
#endif
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (*typeReturn == XmAS_IS)
|
|
Packit |
b099d7 |
*typeReturn = XmFONT_IS_FONT;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (ret_val == (char *)XmAS_IS)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
#ifdef XTHREADS
|
|
Packit |
b099d7 |
if (app)
|
|
Packit |
b099d7 |
_XmAppUnlock(app);
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
_XmProcessUnlock();
|
|
Packit |
b099d7 |
#endif
|
|
Packit |
b099d7 |
return(NULL);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
#ifdef XTHREADS
|
|
Packit |
b099d7 |
if (app)
|
|
Packit |
b099d7 |
_XmAppUnlock(app);
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
_XmProcessUnlock();
|
|
Packit |
b099d7 |
#endif
|
|
Packit |
b099d7 |
return(ret_val);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
char *
|
|
Packit |
b099d7 |
XmFontListEntryGetTag(
|
|
Packit |
b099d7 |
XmFontListEntry entry )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
Cardinal n;
|
|
Packit |
b099d7 |
Arg args[1];
|
|
Packit |
b099d7 |
char *tag;
|
|
Packit |
b099d7 |
char *ret_val;
|
|
Packit |
b099d7 |
#ifdef XTHREADS
|
|
Packit |
b099d7 |
XtAppContext app=NULL;
|
|
Packit |
b099d7 |
#endif
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (entry == NULL)
|
|
Packit |
b099d7 |
return (NULL);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
#ifdef XTHREADS
|
|
Packit |
b099d7 |
if ( _XmRendDisplay((XmRendition)entry) )
|
|
Packit |
b099d7 |
app = XtDisplayToApplicationContext(_XmRendDisplay((XmRendition)entry));
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (app)
|
|
Packit |
b099d7 |
_XmAppLock(app);
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
_XmProcessLock();
|
|
Packit |
b099d7 |
#endif
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
n = 0;
|
|
Packit |
b099d7 |
XtSetArg(args[n], XmNtag, &tag;; n++;
|
|
Packit |
b099d7 |
XmRenditionRetrieve(entry, args, n);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
ret_val = XtNewString(tag);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
#ifdef XTHREADS
|
|
Packit |
b099d7 |
if (app)
|
|
Packit |
b099d7 |
_XmAppUnlock(app);
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
_XmProcessUnlock();
|
|
Packit |
b099d7 |
#endif
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
return ret_val;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XmFontList
|
|
Packit |
b099d7 |
XmFontListAppendEntry(
|
|
Packit |
b099d7 |
XmFontList old ,
|
|
Packit |
b099d7 |
XmFontListEntry entry )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmRendition rends[1];
|
|
Packit |
b099d7 |
XmFontList ret_val;
|
|
Packit |
b099d7 |
#ifdef XTHREADS
|
|
Packit |
b099d7 |
XtAppContext app=NULL;
|
|
Packit |
b099d7 |
#endif
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (!entry) {
|
|
Packit |
b099d7 |
return (old);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
#ifdef XTHREADS
|
|
Packit |
b099d7 |
if (_XmRendDisplay((XmRendition)entry))
|
|
Packit |
b099d7 |
app = XtDisplayToApplicationContext(_XmRendDisplay((XmRendition)entry));
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (app)
|
|
Packit |
b099d7 |
_XmAppLock(app);
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
_XmProcessLock();
|
|
Packit |
b099d7 |
#endif
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
rends[0] = entry;
|
|
Packit |
b099d7 |
ret_val = XmRenderTableAddRenditions(old, rends, 1, XmDUPLICATE);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
#ifdef XTHREADS
|
|
Packit |
b099d7 |
if (app)
|
|
Packit |
b099d7 |
_XmAppUnlock(app);
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
_XmProcessUnlock();
|
|
Packit |
b099d7 |
#endif
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
return ret_val;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XmFontListEntry
|
|
Packit |
b099d7 |
XmFontListNextEntry(
|
|
Packit |
b099d7 |
XmFontContext context )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmRendition entry;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
_XmProcessLock();
|
|
Packit |
b099d7 |
if ((context == NULL) || (FLContextError(context))) {
|
|
Packit |
b099d7 |
_XmProcessUnlock();
|
|
Packit |
b099d7 |
return (NULL);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (FLContextIndex(context) >=
|
|
Packit |
b099d7 |
_XmRTCount(FLContextTable(context)))
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
FLContextError(context) = TRUE;
|
|
Packit |
b099d7 |
_XmProcessUnlock();
|
|
Packit |
b099d7 |
return (NULL);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
entry =
|
|
Packit |
b099d7 |
_XmRTRenditions(FLContextTable(context))[FLContextIndex(context)];
|
|
Packit |
b099d7 |
FLContextIndex(context)++;
|
|
Packit |
b099d7 |
_XmProcessUnlock();
|
|
Packit |
b099d7 |
return((XmFontListEntry)entry);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XmFontList
|
|
Packit |
b099d7 |
XmFontListRemoveEntry(
|
|
Packit |
b099d7 |
XmFontList old ,
|
|
Packit |
b099d7 |
XmFontListEntry entry )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
Cardinal n;
|
|
Packit |
b099d7 |
Arg args[3];
|
|
Packit |
b099d7 |
XmStringTag tags[1];
|
|
Packit |
b099d7 |
XmFontType type1;
|
|
Packit |
b099d7 |
XtPointer font1;
|
|
Packit |
b099d7 |
#ifdef XTHREADS
|
|
Packit |
b099d7 |
XtAppContext app=NULL;
|
|
Packit |
b099d7 |
#endif
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if ((old == NULL) || (entry == NULL))
|
|
Packit |
b099d7 |
return (old);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
#ifdef XTHREADS
|
|
Packit |
b099d7 |
if ( _XmRendDisplay((XmRendition)entry) )
|
|
Packit |
b099d7 |
app = XtDisplayToApplicationContext(_XmRendDisplay((XmRendition)entry));
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (app)
|
|
Packit |
b099d7 |
_XmAppLock(app);
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
_XmProcessLock();
|
|
Packit |
b099d7 |
#endif
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
n = 0;
|
|
Packit |
b099d7 |
XtSetArg(args[n], XmNtag, &tags[0]); n++;
|
|
Packit |
b099d7 |
XtSetArg(args[n], XmNfontType, &type1); n++;
|
|
Packit |
b099d7 |
XtSetArg(args[n], XmNfont, &font1); n++;
|
|
Packit |
b099d7 |
XmRenditionRetrieve(entry, args, n);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
old = _XmRenderTableRemoveRenditions(old, tags, 1, TRUE, type1, font1);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
#ifdef XTHREADS
|
|
Packit |
b099d7 |
if (app)
|
|
Packit |
b099d7 |
_XmAppUnlock(app);
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
_XmProcessUnlock();
|
|
Packit |
b099d7 |
#endif
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
return(old);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XmFontListEntry
|
|
Packit |
b099d7 |
XmFontListEntryLoad(
|
|
Packit |
b099d7 |
Display *display ,
|
|
Packit |
b099d7 |
char *fontName ,
|
|
Packit |
b099d7 |
XmFontType type ,
|
|
Packit |
b099d7 |
char *tag )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
Cardinal n;
|
|
Packit |
b099d7 |
Arg args[4];
|
|
Packit |
b099d7 |
XmFontListEntry ret_val;
|
|
Packit |
b099d7 |
_XmDisplayToAppContext(display);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
_XmAppLock(app);
|
|
Packit |
b099d7 |
n = 0;
|
|
Packit |
b099d7 |
XtSetArg(args[n], XmNfontName, fontName); n++;
|
|
Packit |
b099d7 |
XtSetArg(args[n], XmNfontType, type); n++;
|
|
Packit |
b099d7 |
XtSetArg(args[n], XmNloadModel, XmLOAD_IMMEDIATE); n++;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
ret_val = _XmRenditionCreate(display, NULL, XmS, XmCFontList,
|
|
Packit |
b099d7 |
_XmStringCacheTag(tag, XmSTRING_TAG_STRLEN),
|
|
Packit |
b099d7 |
args, n, NULL);
|
|
Packit |
b099d7 |
_XmAppUnlock(app);
|
|
Packit |
b099d7 |
return ret_val;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* NOTE - this function XmFontListCreate is NOT MT-safe if the
|
|
Packit |
b099d7 |
application is using threads with multiple application contexts
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
to use Font lists in threaded code with multiple application contexts
|
|
Packit |
b099d7 |
it is necessary to use the new API XmFontListCreate_r function
|
|
Packit |
b099d7 |
which passes in an additional widget parameter ... this widget
|
|
Packit |
b099d7 |
MUST be for the display that font will be used in
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
Font should not be shared between displays in an MT environment */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XmFontList
|
|
Packit |
b099d7 |
XmFontListCreate(
|
|
Packit |
b099d7 |
XFontStruct *font,
|
|
Packit |
b099d7 |
XmStringCharSet charset )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
Cardinal n;
|
|
Packit |
b099d7 |
Arg args[4];
|
|
Packit |
b099d7 |
XmRendition rends[1];
|
|
Packit |
b099d7 |
XmStringCharSet curcharset;
|
|
Packit |
b099d7 |
XmRenderTable ret_val;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
_XmProcessLock();
|
|
Packit |
b099d7 |
if ((font == NULL) || (charset == NULL)) {
|
|
Packit |
b099d7 |
_XmProcessUnlock();
|
|
Packit |
b099d7 |
return (NULL);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if ((charset != XmFONTLIST_DEFAULT_TAG) &&
|
|
Packit |
b099d7 |
(strcmp(charset, XmSTRING_DEFAULT_CHARSET) == 0))
|
|
Packit |
b099d7 |
curcharset = _XmStringGetCurrentCharset();
|
|
Packit |
b099d7 |
else curcharset = charset;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
n = 0;
|
|
Packit |
b099d7 |
XtSetArg(args[n], XmNfontType, XmFONT_IS_FONT); n++;
|
|
Packit |
b099d7 |
XtSetArg(args[n], XmNfont, (XtPointer)font); n++;
|
|
Packit |
b099d7 |
XtSetArg(args[n], XmNloadModel, XmLOAD_IMMEDIATE); n++;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
rends[0] =
|
|
Packit |
b099d7 |
XmRenditionCreate(NULL,
|
|
Packit |
b099d7 |
_XmStringCacheTag(curcharset, XmSTRING_TAG_STRLEN),
|
|
Packit |
b099d7 |
args, n);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
_XmProcessUnlock();
|
|
Packit |
b099d7 |
ret_val = XmRenderTableAddRenditions(NULL, rends, 1, XmDUPLICATE);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XmRenditionFree(rends[0]);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
return(ret_val);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* MT safe version of XmFontListCreate - requires widget parameter
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
A display variable is necessary to create a render table in an
|
|
Packit |
b099d7 |
MT safe environment
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
the widget passed in DOES NOT need to be the widget which uses the
|
|
Packit |
b099d7 |
font however it MUST be on the same display
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
Fonts can not be shared among displays in an MT environment
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XmFontList
|
|
Packit |
b099d7 |
XmFontListCreate_r(
|
|
Packit |
b099d7 |
XFontStruct *font,
|
|
Packit |
b099d7 |
XmStringCharSet charset,
|
|
Packit |
b099d7 |
Widget wid )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
Cardinal n;
|
|
Packit |
b099d7 |
Arg args[4];
|
|
Packit |
b099d7 |
XmRendition rends[1];
|
|
Packit |
b099d7 |
XmStringCharSet curcharset;
|
|
Packit |
b099d7 |
XmRenderTable ret_val;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
_XmWidgetToAppContext(wid);
|
|
Packit |
b099d7 |
_XmAppLock(app);
|
|
Packit |
b099d7 |
if ((font == NULL) || (charset == NULL)) {
|
|
Packit |
b099d7 |
_XmAppUnlock(app);
|
|
Packit |
b099d7 |
return (NULL);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if ((charset != XmFONTLIST_DEFAULT_TAG) &&
|
|
Packit |
b099d7 |
(strcmp(charset, XmSTRING_DEFAULT_CHARSET) == 0))
|
|
Packit |
b099d7 |
curcharset = _XmStringGetCurrentCharset();
|
|
Packit |
b099d7 |
else curcharset = charset;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
n = 0;
|
|
Packit |
b099d7 |
XtSetArg(args[n], XmNfontType, XmFONT_IS_FONT); n++;
|
|
Packit |
b099d7 |
XtSetArg(args[n], XmNfont, (XtPointer)font); n++;
|
|
Packit |
b099d7 |
XtSetArg(args[n], XmNloadModel, XmLOAD_IMMEDIATE); n++;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
rends[0] =
|
|
Packit |
b099d7 |
XmRenditionCreate(wid,
|
|
Packit |
b099d7 |
_XmStringCacheTag(curcharset, XmSTRING_TAG_STRLEN),
|
|
Packit |
b099d7 |
args, n);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
ret_val = XmRenderTableAddRenditions(NULL, rends, 1, XmDUPLICATE);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XmRenditionFree(rends[0]);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
_XmAppUnlock(app);
|
|
Packit |
b099d7 |
return(ret_val);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* NOTE - this function XmStringCreateFontList is NOT MT-safe if the
|
|
Packit |
b099d7 |
application is using threads with multiple application contexts
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
to use Font lists in threaded code with multiple application contexts
|
|
Packit |
b099d7 |
it is necessary to use the new API XmFontListCreate_r function
|
|
Packit |
b099d7 |
which passes in an additional widget parameter ... this widget
|
|
Packit |
b099d7 |
MUST be for the display that font will be used in
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
Font should not be shared between displays in an MT environment */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XmFontList
|
|
Packit |
b099d7 |
XmStringCreateFontList(
|
|
Packit |
b099d7 |
XFontStruct *font,
|
|
Packit |
b099d7 |
XmStringCharSet charset )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
return (XmFontListCreate(font,charset));
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* MT safe version of XmStringCreateFontList - requires widget parameter
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
A display variable is necessary to create a render table in an
|
|
Packit |
b099d7 |
MT safe environment
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
the widget passed in DOES NOT need to be the widget which uses the
|
|
Packit |
b099d7 |
font however it MUST be on the same display
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
Fonts can not be shared among displays in an MT environment
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
XmFontList
|
|
Packit |
b099d7 |
XmStringCreateFontList_r(
|
|
Packit |
b099d7 |
XFontStruct *font,
|
|
Packit |
b099d7 |
XmStringCharSet charset,
|
|
Packit |
b099d7 |
Widget wid )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
/* we dont need to lock since this is just a wrapper */
|
|
Packit |
b099d7 |
return (XmFontListCreate_r(font,charset, wid));
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* dump a font list
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
void
|
|
Packit |
b099d7 |
XmFontListFree (
|
|
Packit |
b099d7 |
XmFontList fontlist)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmRenderTableFree(fontlist);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* extent a font list by one element, the old font list is gone
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
XmFontList
|
|
Packit |
b099d7 |
XmFontListAdd(
|
|
Packit |
b099d7 |
XmFontList old,
|
|
Packit |
b099d7 |
XFontStruct *font,
|
|
Packit |
b099d7 |
XmStringCharSet charset )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmStringCharSet curcharset;
|
|
Packit |
b099d7 |
Cardinal n;
|
|
Packit |
b099d7 |
Arg args[4];
|
|
Packit |
b099d7 |
XmRendition rends[1];
|
|
Packit |
b099d7 |
XmFontList ret_val;
|
|
Packit |
b099d7 |
#ifdef XTHREADS
|
|
Packit |
b099d7 |
XtAppContext app=NULL;
|
|
Packit |
b099d7 |
#endif
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (!old)
|
|
Packit |
b099d7 |
return((XmFontList) NULL);
|
|
Packit |
b099d7 |
if (!charset || !font)
|
|
Packit |
b099d7 |
return ((XmFontList) old);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
#ifdef XTHREADS
|
|
Packit |
b099d7 |
if ( _XmRTDisplay((XmRenderTable)old) )
|
|
Packit |
b099d7 |
app = XtDisplayToApplicationContext(_XmRTDisplay((XmRenderTable)old));
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (app)
|
|
Packit |
b099d7 |
_XmAppLock(app);
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
_XmProcessLock();
|
|
Packit |
b099d7 |
#endif
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if ((charset != XmFONTLIST_DEFAULT_TAG) &&
|
|
Packit |
b099d7 |
(strcmp(charset, XmSTRING_DEFAULT_CHARSET) == 0))
|
|
Packit |
b099d7 |
curcharset = _XmStringGetCurrentCharset();
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
curcharset = charset;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
n = 0;
|
|
Packit |
b099d7 |
XtSetArg(args[n], XmNfontType, XmFONT_IS_FONT); n++;
|
|
Packit |
b099d7 |
XtSetArg(args[n], XmNfont, (XtPointer)font); n++;
|
|
Packit |
b099d7 |
XtSetArg(args[n], XmNloadModel, XmLOAD_IMMEDIATE); n++;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
rends[0] =
|
|
Packit |
b099d7 |
XmRenditionCreate(NULL,
|
|
Packit |
b099d7 |
_XmStringCacheTag(curcharset, XmSTRING_TAG_STRLEN),
|
|
Packit |
b099d7 |
args, n);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
ret_val = XmRenderTableAddRenditions(old, rends, 1, XmDUPLICATE);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
#ifdef XTHREADS
|
|
Packit |
b099d7 |
if (app)
|
|
Packit |
b099d7 |
_XmAppUnlock(app);
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
_XmProcessUnlock();
|
|
Packit |
b099d7 |
#endif
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
return ret_val;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* replicate a font list
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
XmFontList
|
|
Packit |
b099d7 |
XmFontListCopy(
|
|
Packit |
b099d7 |
XmFontList fontlist )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
return(XmRenderTableCopy(fontlist, NULL, 0));
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XFontStruct *
|
|
Packit |
b099d7 |
_XmGetFirstFont(
|
|
Packit |
b099d7 |
XmFontListEntry entry)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XFontStruct *font_struct;
|
|
Packit |
b099d7 |
Cardinal n;
|
|
Packit |
b099d7 |
Arg args[2];
|
|
Packit |
b099d7 |
XmFontType type;
|
|
Packit |
b099d7 |
XtPointer font;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
n = 0;
|
|
Packit |
b099d7 |
XtSetArg(args[n], XmNfontType, &type); n++;
|
|
Packit |
b099d7 |
XtSetArg(args[n], XmNfont, &font); n++;
|
|
Packit |
b099d7 |
XmRenditionRetrieve(entry, args, n);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (font == (XtPointer)XmAS_IS)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
font_struct = NULL;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else if (type == XmFONT_IS_FONTSET)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XFontStruct **font_struct_list;
|
|
Packit |
b099d7 |
char **font_name_list;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
#ifdef FIX_1252
|
|
Packit |
b099d7 |
if (XFontsOfFontSet((XFontSet)font,
|
|
Packit |
b099d7 |
&font_struct_list, &font_name_list)
|
|
Packit |
b099d7 |
&& font_struct_list[0]->fid != 0)
|
|
Packit |
b099d7 |
#else
|
|
Packit |
b099d7 |
if (XFontsOfFontSet((XFontSet)font,
|
|
Packit |
b099d7 |
&font_struct_list, &font_name_list))
|
|
Packit |
b099d7 |
#endif
|
|
Packit |
b099d7 |
font_struct = font_struct_list[0];
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
font_struct = NULL;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
font_struct = (XFontStruct *)font;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
return (font_struct);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Find an entry in the fontlist which matches the current charset or
|
|
Packit |
b099d7 |
* return the first font if none match.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
Boolean
|
|
Packit |
b099d7 |
XmeRenderTableGetDefaultFont(
|
|
Packit |
b099d7 |
XmFontList fontlist,
|
|
Packit |
b099d7 |
XFontStruct **font_struct )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmStringTag tag = XmFONTLIST_DEFAULT_TAG;
|
|
Packit |
b099d7 |
short indx = -1;
|
|
Packit |
b099d7 |
Boolean retval;
|
|
Packit |
b099d7 |
#ifdef XTHREADS
|
|
Packit |
b099d7 |
XtAppContext app=NULL;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if ( _XmRTDisplay((XmRenderTable)fontlist) )
|
|
Packit |
b099d7 |
app = XtDisplayToApplicationContext(_XmRTDisplay((XmRenderTable)fontlist));
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (app)
|
|
Packit |
b099d7 |
_XmAppLock(app);
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
_XmProcessLock();
|
|
Packit |
b099d7 |
#endif
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
retval = _XmFontListSearch (fontlist, tag, &indx, font_struct);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
#ifdef XTHREADS
|
|
Packit |
b099d7 |
if (app)
|
|
Packit |
b099d7 |
_XmAppUnlock(app);
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
_XmProcessUnlock();
|
|
Packit |
b099d7 |
#endif
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
return(retval);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* find an entry in the font list which matches, return index (or -1) and
|
|
Packit |
b099d7 |
* font stuct ptr (or first in list).
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
Boolean
|
|
Packit |
b099d7 |
_XmFontListSearch(
|
|
Packit |
b099d7 |
XmFontList fontlist,
|
|
Packit |
b099d7 |
XmStringCharSet charset,
|
|
Packit |
b099d7 |
short *indx,
|
|
Packit |
b099d7 |
XFontStruct **font_struct )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmFontListEntry entry;
|
|
Packit |
b099d7 |
Boolean success;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
success = _XmRenderTableFindFallback(fontlist, charset,
|
|
Packit |
b099d7 |
FALSE, indx, &entry);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* For backward compatibility we must try to return something for */
|
|
Packit |
b099d7 |
/* any non-null charset, not just XmFONTLIST_DEFAULT_TAG. */
|
|
Packit |
b099d7 |
if (fontlist && charset && !success)
|
|
Packit |
b099d7 |
success = _XmRenderTableFindFirstFont(fontlist, indx, &entry);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (success)
|
|
Packit |
b099d7 |
*font_struct = _XmGetFirstFont(entry);
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
*font_struct = NULL;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
return success && (*font_struct != NULL);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Fontlist access routines
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
Boolean
|
|
Packit |
b099d7 |
XmFontListInitFontContext(
|
|
Packit |
b099d7 |
XmFontContext *context,
|
|
Packit |
b099d7 |
XmFontList fontlist )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmFontContext p;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
_XmProcessLock();
|
|
Packit |
b099d7 |
if ((!fontlist) || (!context)) {
|
|
Packit |
b099d7 |
_XmProcessUnlock();
|
|
Packit |
b099d7 |
return(FALSE);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
p = (XmFontContext) XtMalloc (sizeof (XmFontListContextRec));
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
FLContextIndex(p) = 0;
|
|
Packit |
b099d7 |
FLContextTable(p) = fontlist;
|
|
Packit |
b099d7 |
FLContextError(p) = FALSE;
|
|
Packit |
b099d7 |
*context = p;
|
|
Packit |
b099d7 |
_XmProcessUnlock();
|
|
Packit |
b099d7 |
return (TRUE);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
Boolean
|
|
Packit |
b099d7 |
XmFontListGetNextFont(
|
|
Packit |
b099d7 |
XmFontContext context,
|
|
Packit |
b099d7 |
XmStringCharSet *charset,
|
|
Packit |
b099d7 |
XFontStruct **font )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmRenderTable table;
|
|
Packit |
b099d7 |
XmRendition rend;
|
|
Packit |
b099d7 |
Cardinal n;
|
|
Packit |
b099d7 |
Arg args[1];
|
|
Packit |
b099d7 |
XmStringTag tag;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
_XmProcessLock();
|
|
Packit |
b099d7 |
if ((context == NULL) || FLContextError(context) ||
|
|
Packit |
b099d7 |
(charset == NULL) || (font == NULL)) {
|
|
Packit |
b099d7 |
_XmProcessUnlock();
|
|
Packit |
b099d7 |
return (FALSE);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
table = FLContextTable(context);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (FLContextIndex(context) >= _XmRTCount(table))
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
FLContextError(context) = TRUE;
|
|
Packit |
b099d7 |
_XmProcessUnlock();
|
|
Packit |
b099d7 |
return(FALSE);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
rend = _XmRTRenditions(table)[FLContextIndex(context)];
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
*font = _XmGetFirstFont(rend);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
_XmProcessUnlock();
|
|
Packit |
b099d7 |
n = 0;
|
|
Packit |
b099d7 |
XtSetArg(args[n], XmNtag, &tag;; n++;
|
|
Packit |
b099d7 |
XmRenditionRetrieve(rend, args, n);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
*charset = XtNewString(tag);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
FLContextIndex(context)++;
|
|
Packit |
b099d7 |
return (TRUE);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
void
|
|
Packit |
b099d7 |
XmFontListFreeFontContext(
|
|
Packit |
b099d7 |
XmFontContext context )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
_XmProcessLock();
|
|
Packit |
b099d7 |
if (context != NULL) XtFree((char *)context);
|
|
Packit |
b099d7 |
_XmProcessUnlock();
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
#ifdef _XmDEBUG_XMSTRING
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
void
|
|
Packit |
b099d7 |
_Xm_dump_fontlist(
|
|
Packit |
b099d7 |
XmFontList f )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
int i = 0;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
for ( ; FontListFont(f) != NULL; f++, i++)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
printf ("fontlist[%3d] of 0x%p\n", i, f);
|
|
Packit |
b099d7 |
printf ("\ttype = %d\n", FontListType(f));
|
|
Packit |
b099d7 |
printf ("\tfont = %p\n", FontListFont(f));
|
|
Packit |
b099d7 |
printf ("\ttag = <%s>\n", FontListTag(f));
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
void
|
|
Packit |
b099d7 |
_Xm_dump_fontlist_cache( void )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
FontlistEntry *cache;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (_fontlist_cache == NULL)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
printf("fontlist cache is empty\n");
|
|
Packit |
b099d7 |
return;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
for (cache = _fontlist_cache; cache; cache = FontCacheNext(cache))
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
printf("cache pointer: %p\n", cache);
|
|
Packit |
b099d7 |
_Xm_dump_fontlist(FontCacheFontList(cache));
|
|
Packit |
b099d7 |
printf("refcount: %d\n", FontCacheRefCount(cache));
|
|
Packit |
b099d7 |
printf("next: %p\n\n", FontCacheNext(cache));
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
#endif /* _XmDEBUG_XMSTRING */
|