github.com/rajveermalviya/gamen@v0.1.2-0.20220930195403-9be15877c1aa/internal/xkbcommon/include/X11/fonts/fontstruct.h (about)

     1  /***********************************************************
     2  Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts.
     3  
     4                          All Rights Reserved
     5  
     6  Permission to use, copy, modify, and distribute this software and its
     7  documentation for any purpose and without fee is hereby granted,
     8  provided that the above copyright notice appear in all copies and that
     9  both that copyright notice and this permission notice appear in
    10  supporting documentation, and that the name of Digital not be
    11  used in advertising or publicity pertaining to distribution of the
    12  software without specific, written prior permission.
    13  
    14  DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
    15  ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
    16  DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
    17  ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
    18  WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
    19  ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
    20  SOFTWARE.
    21  
    22  ******************************************************************/
    23  
    24  #ifndef FONTSTR_H
    25  #define FONTSTR_H
    26  
    27  #include <X11/Xproto.h>
    28  #include "font.h"
    29  #include <X11/Xfuncproto.h>
    30  #include <X11/Xdefs.h>
    31  
    32  /*
    33   * This version of the server font data structure is only for describing
    34   * the in memory data structure. The file structure is not necessarily a
    35   * copy of this. That is up to the compiler and the OS layer font loading
    36   * machinery.
    37   */
    38  
    39  #define GLYPHPADOPTIONS 4	/* 1, 2, 4, or 8 */
    40  
    41  typedef struct _FontProp {
    42      long        name;
    43      long        value;		/* assumes ATOM is not larger than INT32 */
    44  }           FontPropRec;
    45  
    46  typedef struct _FontResolution {
    47      unsigned short x_resolution;
    48      unsigned short y_resolution;
    49      unsigned short point_size;
    50  }           FontResolutionRec;
    51  
    52  typedef struct _ExtentInfo {
    53      DrawDirection drawDirection;
    54      int         fontAscent;
    55      int         fontDescent;
    56      int         overallAscent;
    57      int         overallDescent;
    58      int         overallWidth;
    59      int         overallLeft;
    60      int         overallRight;
    61  }           ExtentInfoRec;
    62  
    63  typedef struct _CharInfo {
    64      xCharInfo   metrics;	/* info preformatted for Queries */
    65      char       *bits;		/* pointer to glyph image */
    66  }           CharInfoRec;
    67  
    68  /*
    69   * Font is created at font load time. It is specific to a single encoding.
    70   * e.g. not all of the glyphs in a font may be part of a single encoding.
    71   */
    72  
    73  typedef struct _FontInfo {
    74      unsigned short firstCol;
    75      unsigned short lastCol;
    76      unsigned short firstRow;
    77      unsigned short lastRow;
    78      unsigned short defaultCh;
    79      unsigned int noOverlap:1;
    80      unsigned int terminalFont:1;
    81      unsigned int constantMetrics:1;
    82      unsigned int constantWidth:1;
    83      unsigned int inkInside:1;
    84      unsigned int inkMetrics:1;
    85      unsigned int allExist:1;
    86      unsigned int drawDirection:2;
    87      unsigned int cachable:1;
    88      unsigned int anamorphic:1;
    89      short       maxOverlap;
    90      short       pad;
    91      xCharInfo   maxbounds;
    92      xCharInfo   minbounds;
    93      xCharInfo   ink_maxbounds;
    94      xCharInfo   ink_minbounds;
    95      short       fontAscent;
    96      short       fontDescent;
    97      int         nprops;
    98      FontPropPtr props;
    99      char       *isStringProp;
   100  }           FontInfoRec;
   101  
   102  typedef struct _Font {
   103      int         refcnt;
   104      FontInfoRec info;
   105      char        bit;
   106      char        byte;
   107      char        glyph;
   108      char        scan;
   109      fsBitmapFormat format;
   110      int         (*get_glyphs) (FontPtr         /* font */,
   111  			       unsigned long   /* count */,
   112  			       unsigned char * /* chars */,
   113  			       FontEncoding    /* encoding */,
   114  			       unsigned long * /* count */,
   115  			       CharInfoPtr *   /* glyphs */);
   116      int         (*get_metrics) (FontPtr         /* font */,
   117  				unsigned long   /* count */,
   118  				unsigned char * /* chars */,
   119  				FontEncoding    /* encoding */,
   120  				unsigned long * /* count */,
   121  				xCharInfo **    /* glyphs */);
   122      void        (*unload_font) (FontPtr         /* font */);
   123      void        (*unload_glyphs) (FontPtr         /* font */);
   124      FontPathElementPtr fpe;
   125      void        *svrPrivate;
   126      void        *fontPrivate;
   127      void        *fpePrivate;
   128      int		maxPrivate;
   129      void        **devPrivates;
   130  }           FontRec;
   131  
   132  #define FontGetPrivate(pFont,n) ((n) > (pFont)->maxPrivate ? (void *) 0 : \
   133  			     (pFont)->devPrivates[n])
   134  
   135  #define FontSetPrivate(pFont,n,ptr) ((n) > (pFont)->maxPrivate ? \
   136  			_FontSetNewPrivate (pFont, n, ptr) : \
   137  			((((pFont)->devPrivates[n] = (ptr)) != 0) || TRUE))
   138  
   139  typedef struct _FontNames {
   140      int         nnames;
   141      int         size;
   142      int        *length;
   143      char      **names;
   144  }           FontNamesRec;
   145  
   146  
   147  /* External view of font paths */
   148  typedef struct _FontPathElement {
   149      int         name_length;
   150  #if FONT_PATH_ELEMENT_NAME_CONST
   151      const
   152  #endif
   153      char        *name;
   154      int         type;
   155      int         refcount;
   156      void        *private;
   157  }           FontPathElementRec;
   158  
   159  typedef Bool (*NameCheckFunc) (const char *name);
   160  typedef int (*InitFpeFunc) (FontPathElementPtr fpe);
   161  typedef int (*FreeFpeFunc) (FontPathElementPtr fpe);
   162  typedef int (*ResetFpeFunc) (FontPathElementPtr fpe);
   163  typedef int (*OpenFontFunc) ( void *client,
   164  			      FontPathElementPtr fpe,
   165  			      Mask flags,
   166  			      const char* name,
   167  			      int namelen,
   168  			      fsBitmapFormat format,
   169  			      fsBitmapFormatMask fmask,
   170  			      XID id,
   171  			      FontPtr* pFont,
   172  			      char** aliasName,
   173  			      FontPtr non_cachable_font);
   174  typedef void (*CloseFontFunc) (FontPathElementPtr fpe, FontPtr pFont);
   175  typedef int (*ListFontsFunc) (void *client,
   176  			      FontPathElementPtr fpe,
   177  			      const char* pat,
   178  			      int len,
   179  			      int max,
   180  			      FontNamesPtr names);
   181  
   182  typedef int (*StartLfwiFunc) (void *client,
   183  			      FontPathElementPtr fpe,
   184  			      const char* pat,
   185  			      int len,
   186  			      int max,
   187  			      void ** privatep);
   188  
   189  typedef int (*NextLfwiFunc) (void *client,
   190  			     FontPathElementPtr fpe,
   191  			     char** name,
   192  			     int* namelen,
   193  			     FontInfoPtr* info,
   194  			     int* numFonts,
   195  			     void *private);
   196  
   197  typedef int (*WakeupFpeFunc) (FontPathElementPtr fpe,
   198  			      unsigned long* LastSelectMask);
   199  
   200  typedef void (*ClientDiedFunc) (void *client,
   201  			       FontPathElementPtr fpe);
   202  
   203  typedef int (*LoadGlyphsFunc) (void *client,
   204  			       FontPtr pfont,
   205  			       Bool range_flag,
   206  			       unsigned int nchars,
   207  			       int item_size,
   208  			       unsigned char* data);
   209  
   210  typedef int (*StartLaFunc) (void *client,
   211  			    FontPathElementPtr fpe,
   212  			    const char* pat,
   213  			    int len,
   214  			    int max,
   215  			    void ** privatep);
   216  
   217  typedef int (*NextLaFunc) (void *client,
   218  			   FontPathElementPtr fpe,
   219  			   char** namep,
   220  			   int* namelenp,
   221  			   char** resolvedp,
   222  			   int* resolvedlenp,
   223  			   void *private);
   224  
   225  typedef void (*SetPathFunc)(void);
   226  
   227  typedef struct _FPEFunctions {
   228      NameCheckFunc       name_check;
   229      InitFpeFunc 	init_fpe;
   230      ResetFpeFunc	reset_fpe;
   231      FreeFpeFunc         free_fpe;
   232      OpenFontFunc        open_font;
   233      CloseFontFunc       close_font;
   234      ListFontsFunc       list_fonts;
   235      StartLaFunc         start_list_fonts_and_aliases;
   236      NextLaFunc          list_next_font_or_alias;
   237      StartLfwiFunc       start_list_fonts_with_info;
   238      NextLfwiFunc        list_next_font_with_info;
   239      WakeupFpeFunc       wakeup_fpe;
   240      ClientDiedFunc 	client_died;
   241  		/* for load_glyphs, range_flag = 0 ->
   242  			nchars = # of characters in data
   243  			item_size = bytes/char
   244  			data = list of characters
   245  		   range_flag = 1 ->
   246  			nchars = # of fsChar2b's in data
   247  			item_size is ignored
   248  			data = list of fsChar2b's */
   249      LoadGlyphsFunc	load_glyphs;
   250      SetPathFunc		set_path_hook;
   251  } FPEFunctionsRec, FPEFunctions;
   252  
   253  /*
   254   * Various macros for computing values based on contents of
   255   * the above structures
   256   */
   257  
   258  #define	GLYPHWIDTHPIXELS(pci) \
   259  	((pci)->metrics.rightSideBearing - (pci)->metrics.leftSideBearing)
   260  
   261  #define	GLYPHHEIGHTPIXELS(pci) \
   262   	((pci)->metrics.ascent + (pci)->metrics.descent)
   263  
   264  #define	GLYPHWIDTHBYTES(pci)	(((GLYPHWIDTHPIXELS(pci))+7) >> 3)
   265  
   266  #define GLYPHWIDTHPADDED(bc)	(((bc)+7) & ~0x7)
   267  
   268  #define BYTES_PER_ROW(bits, nbytes) \
   269  	((nbytes) == 1 ? (((bits)+7)>>3)	/* pad to 1 byte */ \
   270  	:(nbytes) == 2 ? ((((bits)+15)>>3)&~1)	/* pad to 2 bytes */ \
   271  	:(nbytes) == 4 ? ((((bits)+31)>>3)&~3)	/* pad to 4 bytes */ \
   272  	:(nbytes) == 8 ? ((((bits)+63)>>3)&~7)	/* pad to 8 bytes */ \
   273  	: 0)
   274  
   275  #define BYTES_FOR_GLYPH(ci,pad)	(GLYPHHEIGHTPIXELS(ci) * \
   276  				 BYTES_PER_ROW(GLYPHWIDTHPIXELS(ci),pad))
   277  /*
   278   * Macros for computing different bounding boxes for fonts; from
   279   * the font protocol
   280   */
   281  
   282  #define FONT_MAX_ASCENT(pi)	((pi)->fontAscent > (pi)->ink_maxbounds.ascent ? \
   283  			    (pi)->fontAscent : (pi)->ink_maxbounds.ascent)
   284  #define FONT_MAX_DESCENT(pi)	((pi)->fontDescent > (pi)->ink_maxbounds.descent ? \
   285  			    (pi)->fontDescent : (pi)->ink_maxbounds.descent)
   286  #define FONT_MAX_HEIGHT(pi)	(FONT_MAX_ASCENT(pi) + FONT_MAX_DESCENT(pi))
   287  #define FONT_MIN_LEFT(pi)	((pi)->ink_minbounds.leftSideBearing < 0 ? \
   288  			    (pi)->ink_minbounds.leftSideBearing : 0)
   289  #define FONT_MAX_RIGHT(pi)	((pi)->ink_maxbounds.rightSideBearing > \
   290  				(pi)->ink_maxbounds.characterWidth ? \
   291  			    (pi)->ink_maxbounds.rightSideBearing : \
   292  				(pi)->ink_maxbounds.characterWidth)
   293  #define FONT_MAX_WIDTH(pi)	(FONT_MAX_RIGHT(pi) - FONT_MIN_LEFT(pi))
   294  
   295  #include "fontproto.h"
   296  
   297  #endif				/* FONTSTR_H */