Blame src/xftint.h

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