aboutsummaryrefslogtreecommitdiff
path: root/libXft/src/xftint.h
diff options
context:
space:
mode:
Diffstat (limited to 'libXft/src/xftint.h')
-rw-r--r--libXft/src/xftint.h465
1 files changed, 465 insertions, 0 deletions
diff --git a/libXft/src/xftint.h b/libXft/src/xftint.h
new file mode 100644
index 000000000..3aafecf86
--- /dev/null
+++ b/libXft/src/xftint.h
@@ -0,0 +1,465 @@
+/*
+ * 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>
+
+/* Added to <X11/Xfuncproto.h> in X11R6.9 and later */
+#ifndef _X_HIDDEN
+# define _X_HIDDEN /**/
+#endif
+#ifndef _X_EXPORT
+# define _X_EXPORT /**/
+#endif
+
+#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_ */