diff options
author | Thomas Deutschmann <whissi@gentoo.org> | 2019-10-15 12:24:12 +0200 |
---|---|---|
committer | Thomas Deutschmann <whissi@gentoo.org> | 2020-08-13 11:26:55 +0200 |
commit | e088156d5b620e5e639580dacf85c6dc13823c74 (patch) | |
tree | 57f5c025e203279944da512166c20bc0521d8ccd /base/gxxfont.h | |
download | ghostscript-gpl-patches-e088156d5b620e5e639580dacf85c6dc13823c74.tar.gz ghostscript-gpl-patches-e088156d5b620e5e639580dacf85c6dc13823c74.tar.bz2 ghostscript-gpl-patches-e088156d5b620e5e639580dacf85c6dc13823c74.zip |
Import Ghostscript 9.50ghostscript-9.50
Signed-off-by: Thomas Deutschmann <whissi@gentoo.org>
Diffstat (limited to 'base/gxxfont.h')
-rw-r--r-- | base/gxxfont.h | 169 |
1 files changed, 169 insertions, 0 deletions
diff --git a/base/gxxfont.h b/base/gxxfont.h new file mode 100644 index 00000000..0eeb3600 --- /dev/null +++ b/base/gxxfont.h @@ -0,0 +1,169 @@ +/* Copyright (C) 2001-2019 Artifex Software, Inc. + All Rights Reserved. + + This software is provided AS-IS with no warranty, either express or + implied. + + This software is distributed under license and may not be copied, + modified or distributed except as expressly authorized under the terms + of the license contained in the file LICENSE in this distribution. + + Refer to licensing information at http://www.artifex.com or contact + Artifex Software, Inc., 1305 Grant Avenue - Suite 200, Novato, + CA 94945, U.S.A., +1(415)492-9861, for further information. +*/ + + +/* External font interface for Ghostscript library */ + +#ifndef gxxfont_INCLUDED +# define gxxfont_INCLUDED + +#include "gsccode.h" +#include "gxdevcli.h" +#include "gsuid.h" +#include "gsxfont.h" + +/* + * Design issues for external fonts + * + * 1. Where do xfonts come from: a device or a font service? + * + * 2. Is a given xfont associated with a particular device, or with a + * class of devices, which may have different output media? + * (Specifically, Windows displays vs. printers.) + * + * 3. Is an xfont a handle that must be interpreted by its originator, + * or an object with its own set of operations? + * + * 4. Are xfonts always transformation-specific, or is there such a thing + * as a scalable xfont? + * + * 5. What is the meaning of the transformation matrix supplied when + * asking for an xfont? + * + * Answers (for the current design) + * + * 1. Devices supply xfonts. Internal devices (image, null, clipping, + * command list, tracing) forward font requests to a real underlying + * device. File format devices should do the same, but right now + * they don't. + * + * 2. An xfont is not associated with anything: it just provides bitmaps. + * Since xfonts are only used at small sizes and low resolutions, + * tuning differences for different output media aren't likely to be + * an issue. + * + * 3. Xfonts are objects. They are allocated by their originator, and + * (currently) only freed by `restore'. + * + * 4. Xfonts are always transformation-specific. This may lead to some + * clutter, but it's very unlikely that a document will have enough + * different transformed versions of a single font for this to be a + * problem in practice. + * + * 5. The transformation matrix is the CTM within the BuildChar or BuildGlyph + * procedure. This maps a 1000x1000 square to the intended character size + * (assuming the base font uses the usual 1000-unit scaling). + */ + +/* The definitions for xfonts are very similar to those for devices. */ + +/* Structure for generic xfonts. */ +typedef struct gx_xfont_common_s { + const gx_xfont_procs *procs; +} gx_xfont_common; + +/* A generic xfont. */ +struct gx_xfont_s { + gx_xfont_common common; +}; + +/* Definition of xfont procedures. */ + +struct gx_xfont_procs_s { + + /* Look up a font name, UniqueID, and matrix, and return */ + /* an xfont. */ + + /* NOTE: even though this is defined as an xfont_proc, */ + /* it is actually a `factory' procedure, the only one that */ + /* does not take an xfont * as its first argument. */ + +#define xfont_proc_lookup_font(proc)\ + gx_xfont *proc(gx_device *dev, const byte *fname, uint len,\ + int encoding_index, const gs_uid *puid, const gs_matrix *pmat,\ + gs_memory_t *mem) + xfont_proc_lookup_font((*lookup_font)); + + /* + * Convert a character name to an xglyph code. encoding_index is + * actually a gs_encoding_index_t. Either chr or glyph may be absent + * (gs_no_char/glyph), but not both. glyph_name is the glyph's + * (string) name if the glyph is not GS_NO_GLYPH and is not a CID. + */ + /* + * This procedure was deprecated as of release 3.43, but still + * supported. In release 7.21, the argument list was changed, and the + * procedure is no longer deprecated. + */ + +#define xfont_proc_char_xglyph(proc)\ + gx_xglyph proc(gx_xfont *xf, gs_char chr, int encoding_index,\ + gs_glyph glyph, const gs_const_string *glyph_name) + xfont_proc_char_xglyph((*char_xglyph)); + + /* Get the metrics for a character. */ + /* Note: pwidth changed in release 2.9.7. */ + +#define xfont_proc_char_metrics(proc)\ + int proc(gx_xfont *xf, gx_xglyph xg, int wmode,\ + gs_point *pwidth, gs_int_rect *pbbox) + xfont_proc_char_metrics((*char_metrics)); + + /* Render a character. */ + /* (x,y) corresponds to the character origin. */ + /* The target may be any Ghostscript device. */ + +#define xfont_proc_render_char(proc)\ + int proc(gx_xfont *xf, gx_xglyph xg, gx_device *target,\ + int x, int y, gx_color_index color, int required) + xfont_proc_render_char((*render_char)); + + /* Release any external resources associated with an xfont. */ + /* If mprocs is not NULL, also free any storage */ + /* allocated by lookup_font (including the xfont itself). */ + +#define xfont_proc_release(proc)\ + int proc(gx_xfont *xf, gs_memory_t *mem) + xfont_proc_release((*release)); + + /* (There was a char_xglyph2 procedure here, added in release 3.43, */ + /* removed in 7.21.) */ + +}; + +/* + * Since xfonts are garbage-collectable, they need structure descriptors. + * Fortunately, the common part of an xfont contains no pointers to + * GC-managed space, so simple xfonts can use gs_private_st_simple. + * The following macro will serve for an xfont with only one pointer, + * to its device: + */ +#define gs__st_dev_ptrs1(scope_st, stname, stype, sname, penum, preloc, de)\ + static ENUM_PTRS_WITH(penum, stype *xfptr) return 0;\ + case 0: ENUM_RETURN(gx_device_enum_ptr((gx_device *)(xfptr->de)));\ + ENUM_PTRS_END\ + static RELOC_PTRS_WITH(preloc, stype *xfptr) ;\ + xfptr->de = (void *)gx_device_reloc_ptr((gx_device *)(xfptr->de), gcst);\ + RELOC_PTRS_END\ + gs__st_composite_only(scope_st, stname, stype, sname, penum, preloc) +/* + * We probably don't ever want xfont descriptors to be public.... +#define gs_public_st_dev_ptrs1(stname, stype, sname, penum, preloc, de)\ + gs__st_dev_ptrs1(public_st, stname, stype, sname, penum, preloc, de) + */ +#define gs_private_st_dev_ptrs1(stname, stype, sname, penum, preloc, de)\ + gs__st_dev_ptrs1(private_st, stname, stype, sname, penum, preloc, de) + +#endif /* gxxfont_INCLUDED */ |