/* * $Id: xftint.h,v 1.6 2005/07/03 07:00:57 daniels Exp $ * * Copyright © 2000 Keith Packard * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of Keith Packard not be used in * advertising or publicity pertaining to distribution of the software without * specific, written prior permission. Keith Packard makes no * representations about the suitability of this software for any purpose. It * is provided "as is" without express or implied warranty. * * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * PERFORMANCE OF THIS SOFTWARE. */ /* * These definitions are solely for use by the implementation of Xft * and constitute no kind of standard. If you need any of these functions, * please drop me a note. Either the library needs new functionality, * or there's a way to do what you need using the existing published * interfaces. keithp@freedesktop.org */ #ifndef _XFTINT_H_ #define _XFTINT_H_ #ifdef HAVE_CONFIG_H #include "config.h" #else /* X monolithic tree */ #define HAVE_STDLIB_H 1 /* assumed since all ANSI C platforms require it */ #include <X11/Xosdefs.h> /* get string.h or strings.h as appropriate */ #endif #include <stdio.h> #if HAVE_STDLIB_H #include <stdlib.h> #endif #if HAVE_STRING_H #include <string.h> #else #if HAVE_STRINGS_H #include <strings.h> #endif #endif #include <ctype.h> #include <X11/Xlib.h> #include <X11/Xutil.h> #include <X11/Xmd.h> #include <X11/Xlibint.h> #define _XFT_NO_COMPAT_ #include "Xft.h" #include <fontconfig/fcprivate.h> #include <fontconfig/fcfreetype.h> #ifndef HAVE_CONFIG_H # if (FREETYPE_MAJOR > 2 || \ (FREETYPE_MAJOR == 2 && (FREETYPE_MINOR > 1 || \ (FREETYPE_MINOR == 1 && FREETYPE_PATCH >= 5)))) # define HAVE_FT_BITMAP_SIZE_Y_PPEM 1 # else # define HAVE_FT_BITMAP_SIZE_Y_PPEM 0 # endif #endif typedef struct _XftMatcher { char *object; double (*compare) (char *object, FcValue value1, FcValue value2); } XftMatcher; typedef struct _XftSymbolic { const char *name; int value; } XftSymbolic; /* * Glyphs are stored in this structure */ typedef struct _XftGlyph { XGlyphInfo metrics; void *bitmap; unsigned long glyph_memory; } XftGlyph; /* * A hash table translates Unicode values into glyph indicies */ typedef struct _XftUcsHash { FcChar32 ucs4; FT_UInt glyph; } XftUcsHash; /* * Many fonts can share the same underlying face data; this * structure references that. Note that many faces may in fact * live in the same font file; that is irrelevant to this structure * which is concerned only with the individual faces themselves */ typedef struct _XftFtFile { struct _XftFtFile *next; int ref; /* number of font infos using this file */ char *file; /* file name */ int id; /* font index within that file */ FT_F26Dot6 xsize; /* current xsize setting */ FT_F26Dot6 ysize; /* current ysize setting */ FT_Matrix matrix; /* current matrix setting */ int lock; /* lock count; can't unload unless 0 */ FT_Face face; /* pointer to face; only valid when lock */ } XftFtFile; /* * This structure holds the data extracted from a pattern * needed to create a unique font object. */ struct _XftFontInfo { /* * Hash value (not include in hash value computation) */ FcChar32 hash; XftFtFile *file; /* face source */ /* * Rendering options */ FT_F26Dot6 xsize, ysize; /* pixel size */ FcBool antialias; /* doing antialiasing */ FcBool embolden; /* force emboldening */ int rgba; /* subpixel order */ FT_Matrix matrix; /* glyph transformation matrix */ FcBool transform; /* non-identify matrix? */ FT_Int load_flags; /* glyph load flags */ FcBool render; /* whether to use the Render extension */ /* * Internal fields */ int spacing; FcBool minspace; int char_width; }; /* * Internal version of the font with private data */ typedef struct _XftFontInt { XftFont public; /* public fields */ XftFont *next; /* all fonts on display */ XftFont *hash_next; /* fonts in this hash chain */ XftFontInfo info; /* Data from pattern */ int ref; /* reference count */ /* * Per-glyph information, indexed by glyph ID * This array follows the font in memory */ XftGlyph **glyphs; int num_glyphs; /* size of glyphs/bitmaps arrays */ /* * Hash table to get from Unicode value to glyph ID * This array follows the glyphs in memory */ XftUcsHash *hash_table; int hash_value; int rehash_value; /* * X specific fields */ GlyphSet glyphset; /* Render glyphset */ XRenderPictFormat *format; /* Render format for glyphs */ /* * Glyph memory management fields */ unsigned long glyph_memory; unsigned long max_glyph_memory; FcBool use_free_glyphs; /* Use XRenderFreeGlyphs */ } XftFontInt; typedef enum _XftClipType { XftClipTypeNone, XftClipTypeRegion, XftClipTypeRectangles } XftClipType; typedef struct _XftClipRect { int xOrigin; int yOrigin; int n; } XftClipRect; #define XftClipRects(cr) ((XRectangle *) ((cr) + 1)) typedef union _XftClip { XftClipRect *rect; Region region; } XftClip; struct _XftDraw { Display *dpy; int screen; unsigned int bits_per_pixel; unsigned int depth; Drawable drawable; Visual *visual; /* NULL for bitmaps */ Colormap colormap; XftClipType clip_type; XftClip clip; int subwindow_mode; struct { Picture pict; } render; struct { GC gc; int use_pixmap; } core; }; /* * Instead of taking two round trips for each blending request, * assume that if a particular drawable fails GetImage that it will * fail for a "while"; use temporary pixmaps to avoid the errors */ #define XFT_ASSUME_PIXMAP 20 typedef struct _XftSolidColor { XRenderColor color; int screen; Picture pict; } XftSolidColor; #define XFT_NUM_SOLID_COLOR 16 #define XFT_NUM_FONT_HASH 127 typedef struct _XftDisplayInfo { struct _XftDisplayInfo *next; Display *display; XExtCodes *codes; FcPattern *defaults; FcBool hasRender; XftFont *fonts; XRenderPictFormat *solidFormat; unsigned long glyph_memory; unsigned long max_glyph_memory; FcBool use_free_glyphs; int num_unref_fonts; int max_unref_fonts; XftSolidColor colors[XFT_NUM_SOLID_COLOR]; XftFont *fontHash[XFT_NUM_FONT_HASH]; } XftDisplayInfo; /* * By default, use no more than 4 meg of server memory total, and no * more than 1 meg for any one font */ #define XFT_DPY_MAX_GLYPH_MEMORY (4 * 1024 * 1024) #define XFT_FONT_MAX_GLYPH_MEMORY (1024 * 1024) /* * By default, keep the last 16 unreferenced fonts around to * speed reopening them. Note that the glyph caching code * will keep the global memory usage reasonably limited */ #define XFT_DPY_MAX_UNREF_FONTS 16 extern XftDisplayInfo *_XftDisplayInfo; #define XFT_DBG_OPEN 1 #define XFT_DBG_OPENV 2 #define XFT_DBG_RENDER 4 #define XFT_DBG_DRAW 8 #define XFT_DBG_REF 16 #define XFT_DBG_GLYPH 32 #define XFT_DBG_GLYPHV 64 #define XFT_DBG_CACHE 128 #define XFT_DBG_CACHEV 256 #define XFT_DBG_MEMORY 512 #define XFT_MEM_DRAW 0 #define XFT_MEM_FONT 1 #define XFT_MEM_FILE 2 #define XFT_MEM_GLYPH 3 #define XFT_MEM_NUM 4 /* xftcompat.c */ void XftFontSetDestroy (FcFontSet *s); FcBool XftMatrixEqual (_Xconst FcMatrix *mat1, _Xconst FcMatrix *mat2); void XftMatrixMultiply (FcMatrix *result, FcMatrix *a, FcMatrix *b); void XftMatrixRotate (FcMatrix *m, double c, double s); void XftMatrixScale (FcMatrix *m, double sx, double sy); void XftMatrixShear (FcMatrix *m, double sh, double sv); FcPattern *XftPatternCreate (void); void XftValueDestroy (FcValue v); void XftPatternDestroy (FcPattern *p); FcBool XftPatternAdd (FcPattern *p, _Xconst char *object, FcValue value, FcBool append); FcBool XftPatternDel (FcPattern *p, _Xconst char *object); FcBool XftPatternAddInteger (FcPattern *p, _Xconst char *object, int i); FcBool XftPatternAddDouble (FcPattern *p, _Xconst char *object, double i); FcBool XftPatternAddMatrix (FcPattern *p, _Xconst char *object, FcMatrix *i); FcBool XftPatternAddString (FcPattern *p, _Xconst char *object, char *i); FcBool XftPatternAddBool (FcPattern *p, _Xconst char *object, FcBool i); FcResult XftPatternGet (FcPattern *p, _Xconst char *object, int id, FcValue *v); FcResult XftPatternGetInteger (FcPattern *p, _Xconst char *object, int id, int *i); FcResult XftPatternGetDouble (FcPattern *p, _Xconst char *object, int id, double *i); FcResult XftPatternGetString (FcPattern *p, _Xconst char *object, int id, char **i); FcResult XftPatternGetMatrix (FcPattern *p, _Xconst char *object, int id, FcMatrix **i); FcResult XftPatternGetBool (FcPattern *p, _Xconst char *object, int id, FcBool *i); FcPattern *XftPatternDuplicate (FcPattern *orig); FcPattern *XftPatternVaBuild (FcPattern *orig, va_list va); FcPattern *XftPatternBuild (FcPattern *orig, ...); FcBool XftNameUnparse (FcPattern *pat, char *dest, int len); FcBool XftGlyphExists (Display *dpy, XftFont *font, FcChar32 ucs4); FcObjectSet *XftObjectSetCreate (void); Bool XftObjectSetAdd (FcObjectSet *os, _Xconst char *object); void XftObjectSetDestroy (FcObjectSet *os); FcObjectSet *XftObjectSetVaBuild (_Xconst char *first, va_list va); FcObjectSet *XftObjectSetBuild (_Xconst char *first, ...); FcFontSet *XftListFontSets (FcFontSet **sets, int nsets, FcPattern *p, FcObjectSet *os); /* xftcore.c */ void XftRectCore (XftDraw *draw, _Xconst XftColor *color, int x, int y, unsigned int width, unsigned int height); void XftGlyphCore (XftDraw *draw, _Xconst XftColor *color, XftFont *public, int x, int y, _Xconst FT_UInt *glyphs, int nglyphs); void XftGlyphSpecCore (XftDraw *draw, _Xconst XftColor *color, XftFont *public, _Xconst XftGlyphSpec *glyphs, int nglyphs); void XftGlyphFontSpecCore (XftDraw *draw, _Xconst XftColor *color, _Xconst XftGlyphFontSpec *glyphs, int nglyphs); /* xftdbg.c */ int XftDebug (void); /* xftdpy.c */ XftDisplayInfo * _XftDisplayInfoGet (Display *dpy, FcBool createIfNecessary); void _XftDisplayManageMemory (Display *dpy); int XftDefaultParseBool (char *v); FcBool XftDefaultGetBool (Display *dpy, const char *object, int screen, FcBool def); int XftDefaultGetInteger (Display *dpy, const char *object, int screen, int def); double XftDefaultGetDouble (Display *dpy, const char *object, int screen, double def); FcFontSet * XftDisplayGetFontSet (Display *dpy); /* xftdraw.c */ unsigned int XftDrawDepth (XftDraw *draw); unsigned int XftDrawBitsPerPixel (XftDraw *draw); FcBool XftDrawRenderPrepare (XftDraw *draw); /* xftextent.c */ /* xftfont.c */ /* xftfreetype.c */ FcBool _XftSetFace (XftFtFile *f, FT_F26Dot6 xsize, FT_F26Dot6 ysize, FT_Matrix *matrix); void XftFontManageMemory (Display *dpy); /* xftglyph.c */ void _XftFontUncacheGlyph (Display *dpy, XftFont *public); void _XftFontManageMemory (Display *dpy, XftFont *public); /* xftinit.c */ void XftMemReport (void); void XftMemAlloc (int kind, int size); void XftMemFree (int kind, int size); /* xftlist.c */ FcFontSet * XftListFontsPatternObjects (Display *dpy, int screen, FcPattern *pattern, FcObjectSet *os); /* xftname.c */ void _XftNameInit (void); /* xftrender.c */ /* xftstr.c */ int _XftMatchSymbolic (XftSymbolic *s, int n, const char *name, int def); /* xftswap.c */ int XftNativeByteOrder (void); void XftSwapCARD32 (CARD32 *data, int n); void XftSwapCARD24 (CARD8 *data, int width, int height); void XftSwapCARD16 (CARD16 *data, int n); void XftSwapImage (XImage *image); /* xftxlfd.c */ #endif /* _XFT_INT_H_ */