1998-03-28 05:44:41 +03:00
|
|
|
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*-
|
|
|
|
*
|
|
|
|
* The contents of this file are subject to the Netscape Public License
|
|
|
|
* Version 1.0 (the "NPL"); you may not use this file except in
|
|
|
|
* compliance with the NPL. You may obtain a copy of the NPL at
|
|
|
|
* http://www.mozilla.org/NPL/
|
|
|
|
*
|
|
|
|
* Software distributed under the NPL is distributed on an "AS IS" basis,
|
|
|
|
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
|
|
|
* for the specific language governing rights and limitations under the
|
|
|
|
* NPL.
|
|
|
|
*
|
|
|
|
* The Initial Developer of this code under the NPL is Netscape
|
|
|
|
* Communications Corporation. Portions created by Netscape are
|
|
|
|
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
|
|
|
* Reserved.
|
|
|
|
*/
|
|
|
|
/*
|
|
|
|
fonts.h --- fonts, font selector, and related stuff
|
|
|
|
Created: Erik van der Poel <erik@netscape.com>, 6-Oct-95.
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
|
|
#ifndef __xfe_fonts_h_
|
|
|
|
#define __xfe_fonts_h_
|
|
|
|
|
|
|
|
#ifdef __cplusplus
|
|
|
|
extern "C" {
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#include "xp_core.h"
|
|
|
|
#include <lo_ele.h>
|
|
|
|
#include <X11/Xlib.h>
|
|
|
|
|
|
|
|
XP_BEGIN_PROTOS
|
|
|
|
|
|
|
|
/*
|
|
|
|
* defines
|
|
|
|
*/
|
|
|
|
|
1998-06-16 23:44:06 +04:00
|
|
|
#define FE_FONT_TYPE_NONE 0x0
|
1998-03-28 05:44:41 +03:00
|
|
|
#define FE_FONT_TYPE_X8 0x1
|
|
|
|
#define FE_FONT_TYPE_X16 0x2
|
|
|
|
#define FE_FONT_TYPE_GROUP 0x4
|
|
|
|
#ifndef NO_WEB_FONTS
|
|
|
|
#define FE_FONT_TYPE_RENDERABLE 0x8
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
/* the following are macros so that we avoid the overhead of function calls */
|
|
|
|
|
|
|
|
#ifndef NO_WEB_FONTS
|
|
|
|
#define FE_TEXT_EXTENTS(charset, font, string, len, fontAscent, fontDescent, \
|
|
|
|
overall) \
|
|
|
|
do \
|
|
|
|
{ \
|
|
|
|
int direction; \
|
|
|
|
fe_Font platform_font; \
|
|
|
|
int font_type; \
|
|
|
|
\
|
|
|
|
platform_font = ((fe_FontWrap *) font)->platform_font; \
|
|
|
|
font_type = ((fe_FontWrap *) font)->distinguisher; \
|
|
|
|
\
|
|
|
|
if (FE_FONT_TYPE_X8 == font_type) \
|
|
|
|
{ \
|
|
|
|
XTextExtents(((XFontStruct *) platform_font), \
|
|
|
|
(string), (len), &direction, \
|
|
|
|
(fontAscent), (fontDescent), (overall)); \
|
|
|
|
} \
|
|
|
|
else if (FE_FONT_TYPE_X16 == font_type) \
|
|
|
|
{ \
|
|
|
|
XTextExtents16(((XFontStruct *) platform_font), \
|
|
|
|
(XChar2b *) (string), (len)/2, &direction, \
|
|
|
|
(fontAscent), (fontDescent), (overall)); \
|
|
|
|
} \
|
|
|
|
else if (FE_FONT_TYPE_GROUP == font_type) \
|
|
|
|
{ \
|
|
|
|
(*fe_CharSetFuncsArray[fe_CharSetInfoArray[(charset) & 0xff]. \
|
|
|
|
info].textExtents)(platform_font, (string), (len), \
|
|
|
|
&direction, (fontAscent), (fontDescent), (overall)); \
|
|
|
|
} \
|
|
|
|
else \
|
|
|
|
{ \
|
|
|
|
(overall)->width = nfrf_MeasureText(((struct nfrf *) \
|
|
|
|
platform_font), NULL, 0, string, len, NULL, 0, NULL); \
|
|
|
|
*(fontAscent) = \
|
|
|
|
nfrf_GetFontAscent(((struct nfrf *) platform_font), NULL); \
|
|
|
|
*(fontDescent) = \
|
|
|
|
nfrf_GetFontDescent(((struct nfrf *) platform_font), NULL); \
|
|
|
|
(overall)->rbearing = (overall)->width; \
|
|
|
|
(overall)->lbearing = 0; \
|
|
|
|
(overall)->ascent = *(fontAscent); \
|
|
|
|
(overall)->descent = *(fontDescent); \
|
|
|
|
} \
|
|
|
|
} while (0)
|
|
|
|
#else
|
|
|
|
#define FE_TEXT_EXTENTS(charset, font, string, len, fontAscent, fontDescent, \
|
|
|
|
overall) \
|
|
|
|
do \
|
|
|
|
{ \
|
|
|
|
int direction; \
|
|
|
|
int type; \
|
|
|
|
\
|
|
|
|
type = fe_CharSetInfoArray[(charset) & 0xff].type; \
|
|
|
|
\
|
|
|
|
if (type == FE_FONT_TYPE_X8) \
|
|
|
|
{ \
|
|
|
|
XTextExtents((font), (string), (len), &direction, \
|
|
|
|
(fontAscent), (fontDescent), (overall)); \
|
|
|
|
} \
|
|
|
|
else if (type == FE_FONT_TYPE_X16) \
|
|
|
|
{ \
|
|
|
|
XTextExtents16((font), (XChar2b *) (string), (len)/2, \
|
|
|
|
&direction, (fontAscent), (fontDescent), (overall)); \
|
|
|
|
} \
|
|
|
|
else \
|
|
|
|
{ \
|
|
|
|
(*fe_CharSetFuncsArray[fe_CharSetInfoArray[(charset) & 0xff]. \
|
|
|
|
info].textExtents)((font), (string), (len), \
|
|
|
|
&direction, (fontAscent), (fontDescent), (overall)); \
|
|
|
|
} \
|
|
|
|
} while (0)
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifndef NO_WEB_FONTS
|
|
|
|
#define FE_FONT_EXTENTS(charset, font, fontAscent, fontDescent) \
|
|
|
|
do \
|
|
|
|
{ \
|
|
|
|
fe_Font platform_font; \
|
|
|
|
int font_type; \
|
|
|
|
\
|
|
|
|
platform_font = ((fe_FontWrap *) font)->platform_font; \
|
|
|
|
font_type = ((fe_FontWrap *) font)->distinguisher; \
|
|
|
|
\
|
|
|
|
if ((FE_FONT_TYPE_X8 == font_type) || (FE_FONT_TYPE_X16 == font_type))\
|
|
|
|
{ \
|
|
|
|
*(fontAscent) = ((XFontStruct *) platform_font)->ascent; \
|
|
|
|
*(fontDescent) = ((XFontStruct *) platform_font)->descent; \
|
|
|
|
} \
|
|
|
|
else if (FE_FONT_TYPE_GROUP == font_type) \
|
|
|
|
{ \
|
|
|
|
fe_GenericFontExtents(charset, platform_font, \
|
|
|
|
(fontAscent), (fontDescent)); \
|
|
|
|
} \
|
|
|
|
else \
|
|
|
|
{ \
|
|
|
|
*(fontAscent) = \
|
|
|
|
nfrf_GetFontAscent(((struct nfrf *) platform_font), \
|
|
|
|
NULL); \
|
|
|
|
*(fontDescent) = \
|
|
|
|
nfrf_GetFontDescent(((struct nfrf *) platform_font), \
|
|
|
|
NULL); \
|
|
|
|
} \
|
|
|
|
} while (0)
|
|
|
|
#else
|
|
|
|
#define FE_FONT_EXTENTS(charset, font, fontAscent, fontDescent) \
|
|
|
|
do \
|
|
|
|
{ \
|
|
|
|
fe_CharSetInfo *info; \
|
|
|
|
\
|
|
|
|
info = &fe_CharSetInfoArray[(charset) & 0xff]; \
|
|
|
|
\
|
|
|
|
if (info->type == FE_FONT_TYPE_GROUP) \
|
|
|
|
{ \
|
|
|
|
fe_GenericFontExtents(charset, (font), \
|
|
|
|
(fontAscent), (fontDescent)); \
|
|
|
|
} \
|
|
|
|
else \
|
|
|
|
{ \
|
|
|
|
*(fontAscent) = ((XFontStruct *) (font))->ascent; \
|
|
|
|
*(fontDescent) = ((XFontStruct *) (font))->descent; \
|
|
|
|
} \
|
|
|
|
} while (0)
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifndef NO_WEB_FONTS
|
|
|
|
#define FE_DRAW_STRING(charset, dpy, d, font, gc, x, y, string, len) \
|
|
|
|
do \
|
|
|
|
{ \
|
|
|
|
int font_type; \
|
|
|
|
fe_Font platform_font; \
|
|
|
|
\
|
|
|
|
font_type = ((fe_FontWrap *) font)->distinguisher; \
|
|
|
|
platform_font = ((fe_FontWrap *) font)->platform_font; \
|
|
|
|
\
|
|
|
|
if (FE_FONT_TYPE_X8 == font_type) \
|
|
|
|
{ \
|
|
|
|
XDrawString((dpy), (d), (gc), (x), (y), (string), \
|
|
|
|
(len)); \
|
|
|
|
} \
|
|
|
|
else if (FE_FONT_TYPE_X16 == font_type) \
|
|
|
|
{ \
|
|
|
|
XDrawString16((dpy), (d), (gc), (x), (y), \
|
|
|
|
(XChar2b *) (string), (len)/2); \
|
|
|
|
} \
|
|
|
|
else if (FE_FONT_TYPE_GROUP == font_type) \
|
|
|
|
{ \
|
|
|
|
(*fe_CharSetFuncsArray[fe_CharSetInfoArray[(charset) & 0xff]. \
|
|
|
|
info].drawString)((dpy), (d), platform_font, \
|
|
|
|
(gc), (x), (y), (string), (len)); \
|
|
|
|
} \
|
|
|
|
else \
|
|
|
|
{ \
|
|
|
|
struct nfrc * rc; \
|
|
|
|
void * rcbuf[4]; \
|
|
|
|
\
|
|
|
|
rcbuf[0] = (dpy); \
|
|
|
|
rcbuf[1] = (void *) (d); \
|
|
|
|
rcbuf[2] = (gc); \
|
|
|
|
rc = nffbu_CreateRenderingContext(fe_FontUtility, \
|
|
|
|
NF_RC_DIRECT, 0, rcbuf, 3, \
|
|
|
|
NULL); \
|
|
|
|
(void) nfrf_DrawText(((struct nfrf *) platform_font), rc, \
|
|
|
|
(x), (y), 0, (string), (len), NULL); \
|
|
|
|
nfrc_release(rc, NULL); \
|
|
|
|
} \
|
|
|
|
} while (0)
|
|
|
|
#else
|
|
|
|
#define FE_DRAW_STRING(charset, dpy, d, font, gc, x, y, string, len) \
|
|
|
|
do \
|
|
|
|
{ \
|
|
|
|
int type; \
|
|
|
|
\
|
|
|
|
type = fe_CharSetInfoArray[(charset) & 0xff].type; \
|
|
|
|
\
|
|
|
|
if (type == FE_FONT_TYPE_X8) \
|
|
|
|
{ \
|
|
|
|
XDrawString((dpy), (d), (gc), (x), (y), (string), \
|
|
|
|
(len)); \
|
|
|
|
} \
|
|
|
|
else if (type == FE_FONT_TYPE_X16) \
|
|
|
|
{ \
|
|
|
|
XDrawString16((dpy), (d), (gc), (x), (y), \
|
|
|
|
(XChar2b *) (string), (len)/2); \
|
|
|
|
} \
|
|
|
|
else \
|
|
|
|
{ \
|
|
|
|
(*fe_CharSetFuncsArray[fe_CharSetInfoArray[(charset) & 0xff]. \
|
|
|
|
info].drawString)((dpy), (d), (font), \
|
|
|
|
(gc), (x), (y), (string), (len)); \
|
|
|
|
} \
|
|
|
|
} while (0)
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifndef NO_WEB_FONTS
|
|
|
|
#define FE_DRAW_IMAGE_STRING(charset, dpy, d, font, gc, gc2, x, y, string, len) \
|
|
|
|
do \
|
|
|
|
{ \
|
|
|
|
int font_type; \
|
|
|
|
fe_Font platform_font; \
|
|
|
|
\
|
|
|
|
font_type = ((fe_FontWrap *) font)->distinguisher; \
|
|
|
|
platform_font = ((fe_FontWrap *) font)->platform_font; \
|
|
|
|
\
|
|
|
|
if (FE_FONT_TYPE_X8 == font_type) \
|
|
|
|
{ \
|
|
|
|
XDrawImageString((dpy), (d), (gc), (x), (y), \
|
|
|
|
(string), (len)); \
|
|
|
|
} \
|
|
|
|
else if (FE_FONT_TYPE_X16 == font_type) \
|
|
|
|
{ \
|
|
|
|
XDrawImageString16((dpy), (d), (gc), (x), (y), \
|
|
|
|
(XChar2b *) (string), (len)/2); \
|
|
|
|
} \
|
|
|
|
else if (FE_FONT_TYPE_GROUP == font_type) \
|
|
|
|
{ \
|
|
|
|
(*fe_CharSetFuncsArray[fe_CharSetInfoArray[(charset) & 0xff]. \
|
|
|
|
info].drawImageString)((dpy), (d), platform_font, \
|
|
|
|
(gc), (gc2), (x), (y), (string), (len)); \
|
|
|
|
} \
|
|
|
|
else \
|
|
|
|
{ \
|
|
|
|
struct nfrc *rc; \
|
|
|
|
void * rcbuf[4]; \
|
|
|
|
\
|
|
|
|
rcbuf[0] = (dpy); \
|
|
|
|
rcbuf[1] = (void *) (d); \
|
|
|
|
rcbuf[2] = (gc); \
|
|
|
|
rcbuf[3] = (void *)(NF_DrawImageTextMask); \
|
|
|
|
rc = nffbu_CreateRenderingContext(fe_FontUtility, \
|
|
|
|
NF_RC_DIRECT, \
|
|
|
|
0, rcbuf, 4, NULL); \
|
|
|
|
(void) nfrf_DrawText(((struct nfrf *) platform_font), rc, \
|
|
|
|
(x), (y), 0, (string), (len), NULL); \
|
|
|
|
nfrc_release(rc, NULL); \
|
|
|
|
} \
|
|
|
|
} while (0)
|
|
|
|
#else
|
|
|
|
#define FE_DRAW_IMAGE_STRING(charset, dpy, d, font, gc, gc2, x, y, string, len) \
|
|
|
|
do \
|
|
|
|
{ \
|
|
|
|
int type; \
|
|
|
|
\
|
|
|
|
type = fe_CharSetInfoArray[(charset) & 0xff].type; \
|
|
|
|
\
|
|
|
|
if (type == FE_FONT_TYPE_X8) \
|
|
|
|
{ \
|
|
|
|
XDrawImageString((dpy), (d), (gc), (x), (y), (string), \
|
|
|
|
(len)); \
|
|
|
|
} \
|
|
|
|
else if (type == FE_FONT_TYPE_X16) \
|
|
|
|
{ \
|
|
|
|
XDrawImageString16((dpy), (d), (gc), (x), (y), \
|
|
|
|
(XChar2b *) (string), (len)/2); \
|
|
|
|
} \
|
|
|
|
else \
|
|
|
|
{ \
|
|
|
|
(*fe_CharSetFuncsArray[fe_CharSetInfoArray[(charset) & 0xff]. \
|
|
|
|
info].drawImageString)((dpy), (d), \
|
|
|
|
(font), (gc), (gc2), (x), (y), (string), (len)); \
|
|
|
|
} \
|
|
|
|
} while (0)
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
#ifndef NO_WEB_FONTS
|
|
|
|
#define FE_SET_GC_FONT(charset, gc, font, flags) \
|
|
|
|
do \
|
|
|
|
{ \
|
|
|
|
int font_type; \
|
|
|
|
fe_Font platform_font; \
|
|
|
|
\
|
|
|
|
font_type = ((fe_FontWrap *) font)->distinguisher; \
|
|
|
|
platform_font = ((fe_FontWrap *) font)->platform_font; \
|
|
|
|
\
|
|
|
|
if ((FE_FONT_TYPE_X8 == font_type) || \
|
|
|
|
(FE_FONT_TYPE_X16 == font_type)) \
|
|
|
|
{ \
|
|
|
|
(gc)->font = ((XFontStruct *) platform_font)->fid; \
|
|
|
|
*(flags) |= GCFont; \
|
|
|
|
} \
|
|
|
|
} while (0)
|
|
|
|
#else
|
|
|
|
#define FE_SET_GC_FONT(charset, gc, font, flags) \
|
|
|
|
do \
|
|
|
|
{ \
|
|
|
|
fe_CharSetInfo *info; \
|
|
|
|
\
|
|
|
|
info = &fe_CharSetInfoArray[(charset) & 0xff]; \
|
|
|
|
\
|
|
|
|
if (info->type != FE_FONT_TYPE_GROUP) \
|
|
|
|
{ \
|
|
|
|
(gc)->font = ((XFontStruct *) (font))->fid; \
|
|
|
|
*(flags) |= GCFont; \
|
|
|
|
} \
|
|
|
|
} while (0)
|
|
|
|
#endif
|
|
|
|
|
1998-05-02 01:40:38 +04:00
|
|
|
#ifndef NO_WEB_FONTS
|
|
|
|
#define FE_NONEDIT_FONTLIST(charset, font, fontlist) \
|
|
|
|
do \
|
|
|
|
{ \
|
|
|
|
fe_Font platform_font; \
|
|
|
|
\
|
|
|
|
fe_CharSetFuncs entry = \
|
|
|
|
fe_CharSetFuncsArray[fe_CharSetInfoArray[(charset) & 0xff].info]; \
|
|
|
|
\
|
|
|
|
platform_font = ((fe_FontWrap *) font)->platform_font; \
|
|
|
|
\
|
|
|
|
(fontlist) = \
|
|
|
|
(* (entry.nonEditGetFontList))(charset, platform_font, \
|
|
|
|
(int)entry.numberOfFonts); \
|
|
|
|
} while(0)
|
|
|
|
#else
|
|
|
|
#define FE_NONEDIT_FONTLIST(charset, font, fontlist) \
|
|
|
|
do \
|
|
|
|
{ \
|
|
|
|
fe_CharSetFuncs entry = \
|
|
|
|
fe_CharSetFuncsArray[fe_CharSetInfoArray[(charset) & 0xff].info]; \
|
|
|
|
\
|
|
|
|
(fontlist) = \
|
|
|
|
(* (entry.nonEditGetFontList))( charset, font, \
|
|
|
|
(int) entry.numberOfFonts); \
|
|
|
|
} while(0)
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
#ifndef NO_WEB_FONTS
|
|
|
|
#define FE_NONEDIT_TO_XMSTRING(charset, font, string, len) \
|
|
|
|
(*fe_CharSetFuncsArray[fe_CharSetInfoArray[(charset) & 0xff]. \
|
|
|
|
info].nonEditToXmString)( (charset), \
|
|
|
|
(fe_Font) (((fe_FontWrap *) font)->platform_font), \
|
|
|
|
(string), \
|
|
|
|
(len) \
|
|
|
|
)
|
|
|
|
#else
|
|
|
|
#define FE_NONEDIT_TO_XMSTRING(charset, font, string, len) \
|
|
|
|
(*fe_CharSetFuncsArray[fe_CharSetInfoArray[(charset) & 0xff]. \
|
|
|
|
info].nonEditToXmString)((charset), \
|
|
|
|
(fe_Font)(font), \
|
|
|
|
(string), \
|
|
|
|
(len) \
|
|
|
|
)
|
|
|
|
#endif
|
1998-03-28 05:44:41 +03:00
|
|
|
|
|
|
|
/*
|
|
|
|
* typedefs and structs
|
|
|
|
*/
|
|
|
|
|
|
|
|
#ifndef NO_WEB_FONTS
|
|
|
|
typedef struct fe_FontWrap
|
|
|
|
{
|
|
|
|
unsigned char distinguisher;
|
|
|
|
void * platform_font;
|
|
|
|
} fe_FontWrap;
|
|
|
|
#endif
|
|
|
|
|
|
|
|
typedef void *fe_Font;
|
|
|
|
|
|
|
|
typedef struct fe_FontFace fe_FontFace;
|
|
|
|
|
|
|
|
struct fe_FontFace
|
|
|
|
{
|
|
|
|
fe_FontFace *next;
|
|
|
|
|
|
|
|
char *longXLFDFontName;
|
|
|
|
|
|
|
|
fe_Font font;
|
|
|
|
fe_Font javafont;
|
|
|
|
XP_Bool loaded;
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
typedef struct fe_FontSize fe_FontSize;
|
|
|
|
|
|
|
|
struct fe_FontSize
|
|
|
|
{
|
|
|
|
fe_FontSize *next;
|
|
|
|
|
|
|
|
int size;
|
|
|
|
|
|
|
|
/* whether the user has selected this size in preferences */
|
|
|
|
unsigned int selected : 1;
|
|
|
|
|
|
|
|
/* whether this record is in the css pool */
|
|
|
|
unsigned int in_pool: 1;
|
|
|
|
|
|
|
|
/* 0 = normal, 1 = bold, 2 = italic, 3 = boldItalic */
|
|
|
|
fe_FontFace *faces[4];
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
typedef struct fe_FontFamily
|
|
|
|
{
|
|
|
|
/* displayed name of this family/foundry */
|
|
|
|
char *name;
|
|
|
|
|
|
|
|
/* XLFD name of foundry */
|
|
|
|
char *foundry;
|
|
|
|
|
|
|
|
/* XLFD name of family */
|
|
|
|
char *family;
|
|
|
|
|
|
|
|
/* whether the user has selected this family in preferences */
|
|
|
|
unsigned int selected : 1;
|
|
|
|
|
|
|
|
/* whether not to allow scaling for this family */
|
|
|
|
unsigned int allowScaling : 1;
|
|
|
|
|
|
|
|
/* whether the htmlSizes have been computer or not */
|
|
|
|
unsigned int htmlSizesComputed : 1;
|
|
|
|
|
|
|
|
/* one for each document size, 1-7 */
|
|
|
|
fe_FontSize *htmlSizes[7];
|
|
|
|
|
|
|
|
/* selected size if scaled font */
|
|
|
|
int scaledSize;
|
|
|
|
|
|
|
|
/* pointer to all pixel sizes within this family */
|
|
|
|
fe_FontSize *pixelSizes;
|
|
|
|
|
|
|
|
/* allocated size of pixelSizes array */
|
|
|
|
short pixelAlloc;
|
|
|
|
|
|
|
|
/* actual number of pixel sizes */
|
|
|
|
short numberOfPixelSizes;
|
|
|
|
|
|
|
|
/* pointer to all point sizes within this family */
|
|
|
|
fe_FontSize *pointSizes;
|
|
|
|
|
|
|
|
/* allocated size of pointSizes array */
|
|
|
|
short pointAlloc;
|
|
|
|
|
|
|
|
/* actual number of point sizes */
|
|
|
|
short numberOfPointSizes;
|
|
|
|
|
|
|
|
/* pointer to list of temporarily instantiated point sizes */
|
|
|
|
fe_FontSize *pool;
|
|
|
|
} fe_FontFamily;
|
|
|
|
|
|
|
|
|
|
|
|
/* one for each pitch: proportional and fixed */
|
|
|
|
typedef struct fe_FontPitch
|
|
|
|
{
|
|
|
|
/* pointer to size menu for this pitch */
|
|
|
|
Widget sizeMenu;
|
|
|
|
|
|
|
|
/* pointer to all families of this charset/pitch */
|
|
|
|
fe_FontFamily *families;
|
|
|
|
|
|
|
|
/* allocated size of families array */
|
|
|
|
short alloc;
|
|
|
|
|
|
|
|
/* actual number of families */
|
|
|
|
short numberOfFamilies;
|
|
|
|
|
|
|
|
/* selected family */
|
|
|
|
fe_FontFamily *selectedFamily;
|
|
|
|
|
|
|
|
} fe_FontPitch;
|
|
|
|
|
|
|
|
|
|
|
|
/* we have one of these per charset */
|
|
|
|
typedef struct fe_FontCharSet
|
|
|
|
{
|
|
|
|
/* displayed name of this charset */
|
|
|
|
char *name;
|
|
|
|
|
|
|
|
/* official MIME name of this charset */
|
|
|
|
char *mimeName;
|
|
|
|
|
|
|
|
/* whether the user has selected this one in the preferences */
|
|
|
|
unsigned int selected : 1;
|
|
|
|
|
|
|
|
/* the two pitches: 0 = proportional and 1 = fixed */
|
|
|
|
fe_FontPitch pitches[2];
|
|
|
|
|
|
|
|
} fe_FontCharSet;
|
|
|
|
|
|
|
|
|
|
|
|
typedef struct fe_CharSetInfo
|
|
|
|
{
|
|
|
|
int16 charsetID;
|
|
|
|
unsigned char type;
|
|
|
|
unsigned char info;
|
|
|
|
} fe_CharSetInfo;
|
|
|
|
|
|
|
|
|
|
|
|
typedef XP_Bool (*fe_AreFontsAvailFunc)(int16 win_csid);
|
|
|
|
typedef fe_Font (*fe_LoadFontFunc)(MWContext *context, char *familyName,
|
|
|
|
int points, int sizeNum, int fontmask, int charset, int pitch,
|
|
|
|
int faceNum, Display *dpy);
|
|
|
|
typedef void (*fe_TextExtentsFunc)(fe_Font font, char *string, int len,
|
|
|
|
int *dir, int *fontAscent, int *fontDescent, XCharStruct *overall);
|
|
|
|
typedef void (*fe_DrawStringFunc)(Display *dpy, Drawable d, fe_Font font,
|
|
|
|
GC gc, int x, int y, char *string, int len);
|
|
|
|
typedef void (*fe_DrawImageStringFunc)(Display *dpy, Drawable d, fe_Font font,
|
|
|
|
GC gc, GC gc2, int x, int y, char *string, int len);
|
1998-05-02 01:40:38 +04:00
|
|
|
typedef XmFontList (*fe_GetFontList)(int16 charset, fe_Font font, int numOfFont);
|
|
|
|
typedef XmString (*fe_ToXmString)(int16 charset, fe_Font font, char* string, int len );
|
1998-03-28 05:44:41 +03:00
|
|
|
|
|
|
|
typedef struct fe_CharSetFuncs
|
|
|
|
{
|
|
|
|
unsigned char numberOfFonts;
|
1998-05-02 01:40:38 +04:00
|
|
|
fe_AreFontsAvailFunc areFontsAvail;
|
1998-03-28 05:44:41 +03:00
|
|
|
fe_LoadFontFunc loadFont;
|
|
|
|
fe_TextExtentsFunc textExtents;
|
|
|
|
fe_DrawStringFunc drawString;
|
1998-05-02 01:40:38 +04:00
|
|
|
fe_DrawImageStringFunc drawImageString;
|
|
|
|
fe_GetFontList nonEditGetFontList;
|
|
|
|
fe_ToXmString nonEditToXmString;
|
1998-03-28 05:44:41 +03:00
|
|
|
} fe_CharSetFuncs;
|
|
|
|
|
|
|
|
|
|
|
|
typedef struct fe_FontSettings fe_FontSettings;
|
|
|
|
|
|
|
|
struct fe_FontSettings
|
|
|
|
{
|
|
|
|
fe_FontSettings *next;
|
|
|
|
char *spec;
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
* public data
|
|
|
|
*/
|
|
|
|
|
|
|
|
extern fe_FontCharSet fe_FontCharSets[];
|
|
|
|
|
|
|
|
extern unsigned char fe_SortedFontCharSets[];
|
|
|
|
|
|
|
|
extern fe_CharSetInfo fe_CharSetInfoArray[];
|
|
|
|
|
|
|
|
extern fe_CharSetFuncs fe_CharSetFuncsArray[];
|
|
|
|
|
|
|
|
#ifndef NO_WEB_FONTS
|
|
|
|
extern struct nffbu * fe_FontUtility;
|
|
|
|
#endif
|
|
|
|
|
|
|
|
/*
|
|
|
|
* public functions
|
|
|
|
*/
|
|
|
|
XP_Bool fe_IsCharSetSupported(int16 doc_csid);
|
|
|
|
XP_Bool fe_AreFontsAvail(int16 win_csid);
|
|
|
|
|
|
|
|
fe_Font fe_LoadUnicodeFont(void *, char *familyName, int points,
|
|
|
|
int sizeNum, int fontmask, int charset,
|
|
|
|
int pitch, int faceNum, Display *dpy);
|
|
|
|
void fe_FreeUnicodeFonts(void);
|
|
|
|
|
|
|
|
XmString fe_utf8_to_XmString(fe_Font, char *, int, XmFontList *);
|
|
|
|
|
|
|
|
void fe_ComputeFontSizeTable(fe_FontFamily *family);
|
|
|
|
|
|
|
|
void fe_FreeFontGroups(void);
|
|
|
|
|
|
|
|
void fe_FreeFonts(void);
|
|
|
|
|
|
|
|
void fe_FreeFontSettings(fe_FontSettings *set);
|
|
|
|
|
|
|
|
void fe_FreeFontSizeTable(fe_FontFamily *family);
|
|
|
|
|
|
|
|
void fe_GenericFontExtents(int num, fe_Font font, int *fontAscent,
|
|
|
|
int *fontDescent);
|
|
|
|
|
|
|
|
char *fe_GetFontCharSetSetting(void);
|
|
|
|
|
|
|
|
XtPointer fe_GetFont(MWContext *context, int sizeNum, int fontmask);
|
|
|
|
|
|
|
|
XtPointer fe_GetFontOrFontSet(MWContext *context, char *familyName,
|
|
|
|
int sizeNum, int fontmask, XmFontType *type);
|
|
|
|
|
|
|
|
XtPointer fe_GetFontOrFontSetFromFace(MWContext *context, LO_TextAttr *attr,
|
|
|
|
char *net_font_face, int sizeNum,
|
|
|
|
int fontmask, XmFontType *type);
|
|
|
|
|
|
|
|
fe_FontSettings *fe_GetFontSettings(void);
|
|
|
|
|
|
|
|
int fe_GetStrikePosition(int charset, fe_Font font);
|
|
|
|
|
|
|
|
int fe_GetUnderlinePosition(int charset);
|
|
|
|
|
|
|
|
void fe_InitFonts(Display *dpy);
|
|
|
|
|
|
|
|
#ifndef NO_WEB_FONTS
|
|
|
|
extern void fe_DoneWithFont(fe_Font font);
|
|
|
|
#endif
|
|
|
|
|
|
|
|
fe_Font fe_LoadFontFromFace(MWContext *context, LO_TextAttr *attr, int16 *charset,
|
|
|
|
char *net_font_face, int size, int fontmask);
|
|
|
|
|
|
|
|
void fe_ReadFontCharSet(char *charset);
|
|
|
|
|
|
|
|
void fe_ReadFontSpec(char *spec);
|
|
|
|
|
|
|
|
void fe_SetFontSettings(fe_FontSettings *set);
|
|
|
|
|
|
|
|
XP_END_PROTOS
|
|
|
|
int fe_WebfontsNeedReload(MWContext *context);
|
|
|
|
|
|
|
|
|
|
|
|
#ifdef __cplusplus
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#endif /* __xfe_fonts_h_ */
|