summaryrefslogtreecommitdiff
path: root/include/X11/fonts
diff options
context:
space:
mode:
authorKeith Packard <keithp@keithp.com>2015-09-02 00:04:32 -0700
committerKeith Packard <keithp@keithp.com>2015-12-08 20:37:48 -0800
commit135fb032e940ce226c9feb13e6e903f3ecbc5eb0 (patch)
treeb6cea9b925c7be27a13964924b7811823f52f2e2 /include/X11/fonts
parenteb67d10ae82b364a4324e96ce53baaa4e5e75f97 (diff)
Eliminate calls back to X server or font server functions by name (v4)libXfont2-2.0.0
This eliminates the weak symbol adventures and makes all of the calls back to the X server or Font server go through a table of functions instead, clarifying the required API. As this is a rather major change to the API for the library, it now installs itself as libXfont2 instead of libXfont, and the package config file is now xfont2.pc. All of the installed headers remain the same as the original library; there's now a new include file, libxfont2.h, which defines the X server and Font server interfaces. This moves util/atom.c to stubs/atom.c and reformats that file, hence the diff being larger than it would otherwise be. v2: Rename to libXfont2 instead of libXfont_2 as suggested by Emil Velikov Fix whitespace in stubs/atom.c, which was moved from util/ v3: Remove select masks from API. Expose single 'font_init' function for all library initialization. v4: Change name of distributed tarballs to libXfont2 as well Signed-off-by: Keith Packard <keithp@keithp.com>
Diffstat (limited to 'include/X11/fonts')
-rw-r--r--include/X11/fonts/bufio.h2
-rw-r--r--include/X11/fonts/fontmisc.h2
-rw-r--r--include/X11/fonts/fontutil.h2
-rw-r--r--include/X11/fonts/libxfont2.h163
4 files changed, 167 insertions, 2 deletions
diff --git a/include/X11/fonts/bufio.h b/include/X11/fonts/bufio.h
index e7a9f4a..387533d 100644
--- a/include/X11/fonts/bufio.h
+++ b/include/X11/fonts/bufio.h
@@ -66,7 +66,7 @@ extern BufFilePtr BufFilePushBZIP2 ( BufFilePtr );
#endif
extern int BufFileClose ( BufFilePtr, int );
extern int BufFileRead ( BufFilePtr, char*, int );
-extern int BufFileWrite ( BufFilePtr, char*, int );
+extern int BufFileWrite ( BufFilePtr, const char*, int );
#define BufFileGet(f) ((f)->left-- ? *(f)->bufp++ : ((f)->eof = (*(f)->input) (f)))
#define BufFilePut(c,f) (--(f)->left ? *(f)->bufp++ = ((unsigned char)(c)) : (*(f)->output) ((unsigned char)(c),f))
diff --git a/include/X11/fonts/fontmisc.h b/include/X11/fonts/fontmisc.h
index d3926a7..06e49f5 100644
--- a/include/X11/fonts/fontmisc.h
+++ b/include/X11/fonts/fontmisc.h
@@ -54,7 +54,7 @@ in this Software without prior written authorization from The Open Group.
extern Atom MakeAtom ( const char *string, unsigned len, int makeit );
extern int ValidAtom ( Atom atom );
-extern char *NameForAtom (Atom atom);
+extern const char *NameForAtom (Atom atom);
#define lowbit(x) ((x) & (~(x) + 1))
diff --git a/include/X11/fonts/fontutil.h b/include/X11/fonts/fontutil.h
index ed55b89..6e71aa4 100644
--- a/include/X11/fonts/fontutil.h
+++ b/include/X11/fonts/fontutil.h
@@ -3,6 +3,7 @@
#include <X11/fonts/FSproto.h>
+#if 0
extern int FontCouldBeTerminal(FontInfoPtr);
extern int CheckFSFormat(fsBitmapFormat, fsBitmapFormatMask, int *, int *,
int *, int *, int *);
@@ -20,5 +21,6 @@ extern void InitGlyphCaching ( void );
extern void SetGlyphCachingMode ( int newmode );
extern int add_range ( fsRange *newrange, int *nranges, fsRange **range,
Bool charset_subset );
+#endif
#endif /* _FONTUTIL_H_ */
diff --git a/include/X11/fonts/libxfont2.h b/include/X11/fonts/libxfont2.h
new file mode 100644
index 0000000..0ba7419
--- /dev/null
+++ b/include/X11/fonts/libxfont2.h
@@ -0,0 +1,163 @@
+/*
+ * Copyright © 2015 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 the copyright holders not be used in advertising or
+ * publicity pertaining to distribution of the software without specific,
+ * written prior permission. The copyright holders make no representations
+ * about the suitability of this software for any purpose. It is provided "as
+ * is" without express or implied warranty.
+ *
+ * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL THE COPYRIGHT HOLDERS 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.
+ */
+
+#ifndef _LIBXFONT2_H_
+#define _LIBXFONT2_H_
+
+#include <stdarg.h>
+#include <stdint.h>
+#include <X11/Xfuncproto.h>
+#include <X11/fonts/font.h>
+
+#define XFONT2_FPE_FUNCS_VERSION 1
+
+typedef int (*WakeupFpe) (FontPathElementPtr fpe);
+
+typedef struct _xfont2_fpe_funcs {
+ int version;
+ NameCheckFunc name_check;
+ InitFpeFunc init_fpe;
+ FreeFpeFunc free_fpe;
+ ResetFpeFunc reset_fpe;
+ OpenFontFunc open_font;
+ CloseFontFunc close_font;
+ ListFontsFunc list_fonts;
+ StartLfwiFunc start_list_fonts_with_info;
+ NextLfwiFunc list_next_font_with_info;
+ WakeupFpe wakeup_fpe;
+ ClientDiedFunc client_died;
+ LoadGlyphsFunc load_glyphs;
+ StartLaFunc start_list_fonts_and_aliases;
+ NextLaFunc list_next_font_or_alias;
+ SetPathFunc set_path_hook;
+} xfont2_fpe_funcs_rec, *xfont2_fpe_funcs_ptr;
+
+typedef void (*FontBlockHandlerProcPtr) (void *timeout);
+
+typedef void (*FontFdHandlerProcPtr) (int fd, void *data);
+
+#define XFONT2_CLIENT_FUNCS_VERSION 1
+
+typedef struct _xfont2_client_funcs {
+ int version;
+ int (*client_auth_generation)(ClientPtr client);
+ Bool (*client_signal)(ClientPtr client);
+ void (*delete_font_client_id)(Font id);
+ void (*verrorf)(const char *f, va_list ap) _X_ATTRIBUTE_PRINTF(1,0);
+ FontPtr (*find_old_font)(FSID id);
+ FontResolutionPtr (*get_client_resolutions)(int *num);
+ int (*get_default_point_size)(void);
+ Font (*get_new_font_client_id)(void);
+ uint32_t (*get_time_in_millis)(void);
+ int (*init_fs_handlers)(FontPathElementPtr fpe,
+ FontBlockHandlerProcPtr block_handler);
+ int (*register_fpe_funcs)(const xfont2_fpe_funcs_rec *funcs);
+ void (*remove_fs_handlers)(FontPathElementPtr fpe,
+ FontBlockHandlerProcPtr block_handler,
+ Bool all );
+ void *(*get_server_client)(void);
+ int (*set_font_authorizations)(char **authorizations,
+ int *authlen, void *client);
+ int (*store_font_client_font)(FontPtr pfont, Font id);
+ Atom (*make_atom)(const char *string, unsigned len, int makeit);
+ int (*valid_atom)(Atom atom);
+ const char *(*name_for_atom)(Atom atom);
+ unsigned long (*get_server_generation)(void);
+ int (*add_fs_fd)(int fd, FontFdHandlerProcPtr handler, void *data);
+ void (*remove_fs_fd)(int fd);
+ void (*adjust_fs_wait_for_delay)(void *wt, unsigned long newdelay);
+} xfont2_client_funcs_rec, *xfont2_client_funcs_ptr;
+
+_X_EXPORT int
+xfont2_init(xfont2_client_funcs_rec const *client_funcs);
+
+_X_EXPORT void
+xfont2_query_glyph_extents(FontPtr pFont, CharInfoPtr *charinfo,
+ unsigned long count, ExtentInfoRec *info);
+
+_X_EXPORT Bool
+xfont2_query_text_extents(FontPtr pFont, unsigned long count,
+ unsigned char *chars, ExtentInfoRec *info);
+
+_X_EXPORT Bool
+xfont2_parse_glyph_caching_mode(char *str);
+
+_X_EXPORT void
+xfont2_init_glyph_caching(void);
+
+_X_EXPORT void
+xfont2_set_glyph_caching_mode(int newmode);
+
+_X_EXPORT FontNamesPtr
+xfont2_make_font_names_record(unsigned size);
+
+_X_EXPORT void
+xfont2_free_font_names(FontNamesPtr pFN);
+
+_X_EXPORT int
+xfont2_add_font_names_name(FontNamesPtr names,
+ char *name,
+ int length);
+
+typedef struct _xfont2_pattern_cache *xfont2_pattern_cache_ptr;
+
+_X_EXPORT xfont2_pattern_cache_ptr
+xfont2_make_font_pattern_cache(void);
+
+_X_EXPORT void
+xfont2_free_font_pattern_cache(xfont2_pattern_cache_ptr cache);
+
+_X_EXPORT void
+xfont2_empty_font_pattern_cache(xfont2_pattern_cache_ptr cache);
+
+_X_EXPORT void
+xfont2_cache_font_pattern(xfont2_pattern_cache_ptr cache,
+ const char * pattern,
+ int patlen,
+ FontPtr pFont);
+
+_X_EXPORT FontPtr
+xfont2_find_cached_font_pattern(xfont2_pattern_cache_ptr cache,
+ const char * pattern,
+ int patlen);
+
+_X_EXPORT void
+xfont2_remove_cached_font_pattern(xfont2_pattern_cache_ptr cache,
+ FontPtr pFont);
+
+/* private.c */
+
+_X_EXPORT int
+xfont2_allocate_font_private_index (void);
+
+static inline void *
+xfont2_font_get_private(FontPtr pFont, int n)
+{
+ if (n > pFont->maxPrivate)
+ return NULL;
+ return pFont->devPrivates[n];
+}
+
+_X_EXPORT Bool
+xfont2_font_set_private(FontPtr pFont, int n, void *ptr);
+
+#endif /* _LIBXFONT2_H_ */