7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync/***********************************************************
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsyncCopyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts.
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync All Rights Reserved
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsyncPermission to use, copy, modify, and distribute this software and its
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsyncdocumentation for any purpose and without fee is hereby granted,
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsyncprovided that the above copyright notice appear in all copies and that
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsyncboth that copyright notice and this permission notice appear in
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsyncsupporting documentation, and that the name of Digital not be
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsyncused in advertising or publicity pertaining to distribution of the
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsyncsoftware without specific, written prior permission.
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsyncDIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsyncALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsyncDIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsyncANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsyncWHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsyncARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsyncSOFTWARE.
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync******************************************************************/
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync#ifndef FONTSTR_H
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync#define FONTSTR_H
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync#include <X11/Xproto.h>
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync#include "font.h"
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync#include <X11/Xfuncproto.h>
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync#include <X11/Xdefs.h>
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync/*
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync * This version of the server font data strucutre is only for describing
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync * the in memory data structure. The file structure is not necessarily a
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync * copy of this. That is up to the compiler and the OS layer font loading
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync * machinery.
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync */
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync#define GLYPHPADOPTIONS 4 /* 1, 2, 4, or 8 */
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsynctypedef struct _FontProp {
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync long name;
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync long value; /* assumes ATOM is not larger than INT32 */
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync} FontPropRec;
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsynctypedef struct _FontResolution {
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync unsigned short x_resolution;
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync unsigned short y_resolution;
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync unsigned short point_size;
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync} FontResolutionRec;
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsynctypedef struct _ExtentInfo {
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync DrawDirection drawDirection;
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync int fontAscent;
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync int fontDescent;
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync int overallAscent;
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync int overallDescent;
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync int overallWidth;
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync int overallLeft;
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync int overallRight;
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync} ExtentInfoRec;
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsynctypedef struct _CharInfo {
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync xCharInfo metrics; /* info preformatted for Queries */
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync char *bits; /* pointer to glyph image */
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync} CharInfoRec;
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync/*
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync * Font is created at font load time. It is specific to a single encoding.
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync * e.g. not all of the glyphs in a font may be part of a single encoding.
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync */
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsynctypedef struct _FontInfo {
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync unsigned short firstCol;
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync unsigned short lastCol;
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync unsigned short firstRow;
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync unsigned short lastRow;
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync unsigned short defaultCh;
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync unsigned int noOverlap:1;
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync unsigned int terminalFont:1;
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync unsigned int constantMetrics:1;
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync unsigned int constantWidth:1;
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync unsigned int inkInside:1;
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync unsigned int inkMetrics:1;
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync unsigned int allExist:1;
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync unsigned int drawDirection:2;
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync unsigned int cachable:1;
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync unsigned int anamorphic:1;
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync short maxOverlap;
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync short pad;
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync xCharInfo maxbounds;
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync xCharInfo minbounds;
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync xCharInfo ink_maxbounds;
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync xCharInfo ink_minbounds;
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync short fontAscent;
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync short fontDescent;
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync int nprops;
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync FontPropPtr props;
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync char *isStringProp;
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync} FontInfoRec;
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsynctypedef struct _Font {
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync int refcnt;
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync FontInfoRec info;
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync char bit;
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync char byte;
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync char glyph;
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync char scan;
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync fsBitmapFormat format;
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync int (*get_glyphs) (FontPtr /* font */,
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync unsigned long /* count */,
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync unsigned char * /* chars */,
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync FontEncoding /* encoding */,
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync unsigned long * /* count */,
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync CharInfoPtr * /* glyphs */);
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync int (*get_metrics) (FontPtr /* font */,
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync unsigned long /* count */,
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync unsigned char * /* chars */,
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync FontEncoding /* encoding */,
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync unsigned long * /* count */,
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync xCharInfo ** /* glyphs */);
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync void (*unload_font) (FontPtr /* font */);
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync void (*unload_glyphs) (FontPtr /* font */);
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync FontPathElementPtr fpe;
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync pointer svrPrivate;
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync pointer fontPrivate;
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync pointer fpePrivate;
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync int maxPrivate;
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync pointer *devPrivates;
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync} FontRec;
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync#define FontGetPrivate(pFont,n) ((n) > (pFont)->maxPrivate ? (pointer) 0 : \
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync (pFont)->devPrivates[n])
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync#define FontSetPrivate(pFont,n,ptr) ((n) > (pFont)->maxPrivate ? \
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync _FontSetNewPrivate (pFont, n, ptr) : \
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync ((((pFont)->devPrivates[n] = (ptr)) != 0) || TRUE))
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsynctypedef struct _FontNames {
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync int nnames;
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync int size;
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync int *length;
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync char **names;
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync} FontNamesRec;
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync/* External view of font paths */
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsynctypedef struct _FontPathElement {
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync int name_length;
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync char *name;
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync int type;
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync int refcount;
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync pointer private;
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync} FontPathElementRec;
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsynctypedef Bool (*NameCheckFunc) (char *name);
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsynctypedef int (*InitFpeFunc) (FontPathElementPtr fpe);
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsynctypedef int (*FreeFpeFunc) (FontPathElementPtr fpe);
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsynctypedef int (*ResetFpeFunc) (FontPathElementPtr fpe);
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsynctypedef int (*OpenFontFunc) ( pointer client,
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync FontPathElementPtr fpe,
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync Mask flags,
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync char* name,
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync int namelen,
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync fsBitmapFormat format,
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync fsBitmapFormatMask fmask,
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync XID id,
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync FontPtr* pFont,
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync char** aliasName,
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync FontPtr non_cachable_font);
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsynctypedef void (*CloseFontFunc) (FontPathElementPtr fpe, FontPtr pFont);
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsynctypedef int (*ListFontsFunc) (pointer client,
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync FontPathElementPtr fpe,
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync char* pat,
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync int len,
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync int max,
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync FontNamesPtr names);
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsynctypedef int (*StartLfwiFunc) (pointer client,
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync FontPathElementPtr fpe,
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync char* pat,
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync int len,
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync int max,
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync pointer* privatep);
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsynctypedef int (*NextLfwiFunc) (pointer client,
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync FontPathElementPtr fpe,
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync char** name,
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync int* namelen,
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync FontInfoPtr* info,
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync int* numFonts,
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync pointer private);
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsynctypedef int (*WakeupFpeFunc) (FontPathElementPtr fpe,
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync unsigned long* LastSelectMask);
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsynctypedef void (*ClientDiedFunc) (pointer client,
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync FontPathElementPtr fpe);
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsynctypedef int (*LoadGlyphsFunc) (pointer client,
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync FontPtr pfont,
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync Bool range_flag,
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync unsigned int nchars,
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync int item_size,
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync unsigned char* data);
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsynctypedef int (*StartLaFunc) (pointer client,
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync FontPathElementPtr fpe,
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync char* pat,
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync int len,
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync int max,
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync pointer* privatep);
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsynctypedef int (*NextLaFunc) (pointer client,
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync FontPathElementPtr fpe,
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync char** namep,
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync int* namelenp,
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync char** resolvedp,
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync int* resolvedlenp,
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync pointer private);
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsynctypedef void (*SetPathFunc)(void);
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsynctypedef struct _FPEFunctions {
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync NameCheckFunc name_check;
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync InitFpeFunc init_fpe;
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync ResetFpeFunc reset_fpe;
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync FreeFpeFunc free_fpe;
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync OpenFontFunc open_font;
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync CloseFontFunc close_font;
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync ListFontsFunc list_fonts;
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync StartLaFunc start_list_fonts_and_aliases;
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync NextLaFunc list_next_font_or_alias;
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync StartLfwiFunc start_list_fonts_with_info;
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync NextLfwiFunc list_next_font_with_info;
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync WakeupFpeFunc wakeup_fpe;
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync ClientDiedFunc client_died;
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync /* for load_glyphs, range_flag = 0 ->
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync nchars = # of characters in data
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync item_size = bytes/char
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync data = list of characters
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync range_flag = 1 ->
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync nchars = # of fsChar2b's in data
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync item_size is ignored
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync data = list of fsChar2b's */
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync LoadGlyphsFunc load_glyphs;
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync SetPathFunc set_path_hook;
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync} FPEFunctionsRec, FPEFunctions;
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync/*
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync * Various macros for computing values based on contents of
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync * the above structures
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync */
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync#define GLYPHWIDTHPIXELS(pci) \
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync ((pci)->metrics.rightSideBearing - (pci)->metrics.leftSideBearing)
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync#define GLYPHHEIGHTPIXELS(pci) \
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync ((pci)->metrics.ascent + (pci)->metrics.descent)
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync#define GLYPHWIDTHBYTES(pci) (((GLYPHWIDTHPIXELS(pci))+7) >> 3)
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync#define GLYPHWIDTHPADDED(bc) (((bc)+7) & ~0x7)
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync#define BYTES_PER_ROW(bits, nbytes) \
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync ((nbytes) == 1 ? (((bits)+7)>>3) /* pad to 1 byte */ \
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync :(nbytes) == 2 ? ((((bits)+15)>>3)&~1) /* pad to 2 bytes */ \
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync :(nbytes) == 4 ? ((((bits)+31)>>3)&~3) /* pad to 4 bytes */ \
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync :(nbytes) == 8 ? ((((bits)+63)>>3)&~7) /* pad to 8 bytes */ \
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync : 0)
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync#define BYTES_FOR_GLYPH(ci,pad) (GLYPHHEIGHTPIXELS(ci) * \
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync BYTES_PER_ROW(GLYPHWIDTHPIXELS(ci),pad))
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync/*
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync * Macros for computing different bounding boxes for fonts; from
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync * the font protocol
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync */
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync#define FONT_MAX_ASCENT(pi) ((pi)->fontAscent > (pi)->ink_maxbounds.ascent ? \
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync (pi)->fontAscent : (pi)->ink_maxbounds.ascent)
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync#define FONT_MAX_DESCENT(pi) ((pi)->fontDescent > (pi)->ink_maxbounds.descent ? \
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync (pi)->fontDescent : (pi)->ink_maxbounds.descent)
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync#define FONT_MAX_HEIGHT(pi) (FONT_MAX_ASCENT(pi) + FONT_MAX_DESCENT(pi))
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync#define FONT_MIN_LEFT(pi) ((pi)->ink_minbounds.leftSideBearing < 0 ? \
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync (pi)->ink_minbounds.leftSideBearing : 0)
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync#define FONT_MAX_RIGHT(pi) ((pi)->ink_maxbounds.rightSideBearing > \
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync (pi)->ink_maxbounds.characterWidth ? \
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync (pi)->ink_maxbounds.rightSideBearing : \
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync (pi)->ink_maxbounds.characterWidth)
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync#define FONT_MAX_WIDTH(pi) (FONT_MAX_RIGHT(pi) - FONT_MIN_LEFT(pi))
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync#include "fontproto.h"
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync
7a0d67332f33bc21290d63bc7c8150b0cf0a4b21vboxsync#endif /* FONTSTR_H */