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

     1  /* include/X11/Xcursor/Xcursor.h.  Generated from Xcursor.h.in by configure.  */
     2  /*
     3   * Copyright © 2002 Keith Packard
     4   *
     5   * Permission to use, copy, modify, distribute, and sell this software and its
     6   * documentation for any purpose is hereby granted without fee, provided that
     7   * the above copyright notice appear in all copies and that both that
     8   * copyright notice and this permission notice appear in supporting
     9   * documentation, and that the name of Keith Packard not be used in
    10   * advertising or publicity pertaining to distribution of the software without
    11   * specific, written prior permission.  Keith Packard makes no
    12   * representations about the suitability of this software for any purpose.  It
    13   * is provided "as is" without express or implied warranty.
    14   *
    15   * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
    16   * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
    17   * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
    18   * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
    19   * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
    20   * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
    21   * PERFORMANCE OF THIS SOFTWARE.
    22   */
    23  
    24  #ifndef _XCURSOR_H_
    25  #define _XCURSOR_H_
    26  #include <stdio.h>
    27  #include <X11/Xfuncproto.h>
    28  #include <X11/Xlib.h>
    29  
    30  typedef int		XcursorBool;
    31  typedef unsigned int	XcursorUInt;
    32  
    33  typedef XcursorUInt	XcursorDim;
    34  typedef XcursorUInt	XcursorPixel;
    35  
    36  #define XcursorTrue	1
    37  #define XcursorFalse	0
    38  
    39  /*
    40   * Cursor files start with a header.  The header
    41   * contains a magic number, a version number and a
    42   * table of contents which has type and offset information
    43   * for the remaining tables in the file.
    44   *
    45   * File minor versions increment for compatible changes
    46   * File major versions increment for incompatible changes (never, we hope)
    47   *
    48   * Chunks of the same type are always upward compatible.  Incompatible
    49   * changes are made with new chunk types; the old data can remain under
    50   * the old type.  Upward compatible changes can add header data as the
    51   * header lengths are specified in the file.
    52   *
    53   *  File:
    54   *	FileHeader
    55   *	LISTofChunk
    56   *
    57   *  FileHeader:
    58   *	CARD32		magic	    magic number
    59   *	CARD32		header	    bytes in file header
    60   *	CARD32		version	    file version
    61   *	CARD32		ntoc	    number of toc entries
    62   *	LISTofFileToc   toc	    table of contents
    63   *
    64   *  FileToc:
    65   *	CARD32		type	    entry type
    66   *	CARD32		subtype	    entry subtype (size for images)
    67   *	CARD32		position    absolute file position
    68   */
    69  
    70  #define XCURSOR_MAGIC	0x72756358  /* "Xcur" LSBFirst */
    71  
    72  /*
    73   * Current Xcursor version number.  Will be substituted by configure
    74   * from the version in the libXcursor configure.ac file.
    75   */
    76  
    77  #define XCURSOR_LIB_MAJOR 1
    78  #define XCURSOR_LIB_MINOR 2
    79  #define XCURSOR_LIB_REVISION 0
    80  #define XCURSOR_LIB_VERSION	((XCURSOR_LIB_MAJOR * 10000) + \
    81  				 (XCURSOR_LIB_MINOR * 100) + \
    82  				 (XCURSOR_LIB_REVISION))
    83  
    84  /*
    85   * This version number is stored in cursor files; changes to the
    86   * file format require updating this version number
    87   */
    88  #define XCURSOR_FILE_MAJOR	1
    89  #define XCURSOR_FILE_MINOR	0
    90  #define XCURSOR_FILE_VERSION	((XCURSOR_FILE_MAJOR << 16) | (XCURSOR_FILE_MINOR))
    91  #define XCURSOR_FILE_HEADER_LEN	(4 * 4)
    92  #define XCURSOR_FILE_TOC_LEN	(3 * 4)
    93  
    94  typedef struct _XcursorFileToc {
    95      XcursorUInt	    type;	/* chunk type */
    96      XcursorUInt	    subtype;	/* subtype (size for images) */
    97      XcursorUInt	    position;	/* absolute position in file */
    98  } XcursorFileToc;
    99  
   100  typedef struct _XcursorFileHeader {
   101      XcursorUInt	    magic;	/* magic number */
   102      XcursorUInt	    header;	/* byte length of header */
   103      XcursorUInt	    version;	/* file version number */
   104      XcursorUInt	    ntoc;	/* number of toc entries */
   105      XcursorFileToc  *tocs;	/* table of contents */
   106  } XcursorFileHeader;
   107  
   108  /*
   109   * The rest of the file is a list of chunks, each tagged by type
   110   * and version.
   111   *
   112   *  Chunk:
   113   *	ChunkHeader
   114   *	<extra type-specific header fields>
   115   *	<type-specific data>
   116   *
   117   *  ChunkHeader:
   118   *	CARD32	    header	bytes in chunk header + type header
   119   *	CARD32	    type	chunk type
   120   *	CARD32	    subtype	chunk subtype
   121   *	CARD32	    version	chunk type version
   122   */
   123  
   124  #define XCURSOR_CHUNK_HEADER_LEN    (4 * 4)
   125  
   126  typedef struct _XcursorChunkHeader {
   127      XcursorUInt	    header;	/* bytes in chunk header */
   128      XcursorUInt	    type;	/* chunk type */
   129      XcursorUInt	    subtype;	/* chunk subtype (size for images) */
   130      XcursorUInt	    version;	/* version of this type */
   131  } XcursorChunkHeader;
   132  
   133  /*
   134   * Here's a list of the known chunk types
   135   */
   136  
   137  /*
   138   * Comments consist of a 4-byte length field followed by
   139   * UTF-8 encoded text
   140   *
   141   *  Comment:
   142   *	ChunkHeader header	chunk header
   143   *	CARD32	    length	bytes in text
   144   *	LISTofCARD8 text	UTF-8 encoded text
   145   */
   146  
   147  #define XCURSOR_COMMENT_TYPE	    0xfffe0001
   148  #define XCURSOR_COMMENT_VERSION	    1
   149  #define XCURSOR_COMMENT_HEADER_LEN  (XCURSOR_CHUNK_HEADER_LEN + (1 *4))
   150  #define XCURSOR_COMMENT_COPYRIGHT   1
   151  #define XCURSOR_COMMENT_LICENSE	    2
   152  #define XCURSOR_COMMENT_OTHER	    3
   153  #define XCURSOR_COMMENT_MAX_LEN	    0x100000
   154  
   155  typedef struct _XcursorComment {
   156      XcursorUInt	    version;
   157      XcursorUInt	    comment_type;
   158      char	    *comment;
   159  } XcursorComment;
   160  
   161  /*
   162   * Each cursor image occupies a separate image chunk.
   163   * The length of the image header follows the chunk header
   164   * so that future versions can extend the header without
   165   * breaking older applications
   166   *
   167   *  Image:
   168   *	ChunkHeader	header	chunk header
   169   *	CARD32		width	actual width
   170   *	CARD32		height	actual height
   171   *	CARD32		xhot	hot spot x
   172   *	CARD32		yhot	hot spot y
   173   *	CARD32		delay	animation delay
   174   *	LISTofCARD32	pixels	ARGB pixels
   175   */
   176  
   177  #define XCURSOR_IMAGE_TYPE    	    0xfffd0002
   178  #define XCURSOR_IMAGE_VERSION	    1
   179  #define XCURSOR_IMAGE_HEADER_LEN    (XCURSOR_CHUNK_HEADER_LEN + (5*4))
   180  #define XCURSOR_IMAGE_MAX_SIZE	    0x7fff	/* 32767x32767 max cursor size */
   181  
   182  typedef struct _XcursorImage {
   183      XcursorUInt	    version;	/* version of the image data */
   184      XcursorDim	    size;	/* nominal size for matching */
   185      XcursorDim	    width;	/* actual width */
   186      XcursorDim	    height;	/* actual height */
   187      XcursorDim	    xhot;	/* hot spot x (must be inside image) */
   188      XcursorDim	    yhot;	/* hot spot y (must be inside image) */
   189      XcursorUInt	    delay;	/* animation delay to next frame (ms) */
   190      XcursorPixel    *pixels;	/* pointer to pixels */
   191  } XcursorImage;
   192  
   193  /*
   194   * Other data structures exposed by the library API
   195   */
   196  typedef struct _XcursorImages {
   197      int		    nimage;	/* number of images */
   198      XcursorImage    **images;	/* array of XcursorImage pointers */
   199      char	    *name;	/* name used to load images */
   200  } XcursorImages;
   201  
   202  typedef struct _XcursorCursors {
   203      Display	    *dpy;	/* Display holding cursors */
   204      int		    ref;	/* reference count */
   205      int		    ncursor;	/* number of cursors */
   206      Cursor	    *cursors;	/* array of cursors */
   207  } XcursorCursors;
   208  
   209  typedef struct _XcursorAnimate {
   210      XcursorCursors   *cursors;	/* list of cursors to use */
   211      int		    sequence;	/* which cursor is next */
   212  } XcursorAnimate;
   213  
   214  typedef struct _XcursorFile XcursorFile;
   215  
   216  struct _XcursorFile {
   217      void    *closure;
   218      int	    (*read)  (XcursorFile *file, unsigned char *buf, int len);
   219      int	    (*write) (XcursorFile *file, unsigned char *buf, int len);
   220      int	    (*seek)  (XcursorFile *file, long offset, int whence);
   221  };
   222  
   223  typedef struct _XcursorComments {
   224      int		    ncomment;	/* number of comments */
   225      XcursorComment  **comments;	/* array of XcursorComment pointers */
   226  } XcursorComments;
   227  
   228  #define XCURSOR_CORE_THEME  "core"
   229  
   230  _XFUNCPROTOBEGIN
   231  
   232  /*
   233   * Manage Image objects
   234   */
   235  XcursorImage *
   236  XcursorImageCreate (int width, int height);
   237  
   238  void
   239  XcursorImageDestroy (XcursorImage *image);
   240  
   241  /*
   242   * Manage Images objects
   243   */
   244  XcursorImages *
   245  XcursorImagesCreate (int size);
   246  
   247  void
   248  XcursorImagesDestroy (XcursorImages *images);
   249  
   250  void
   251  XcursorImagesSetName (XcursorImages *images, const char *name);
   252  
   253  /*
   254   * Manage Cursor objects
   255   */
   256  XcursorCursors *
   257  XcursorCursorsCreate (Display *dpy, int size);
   258  
   259  void
   260  XcursorCursorsDestroy (XcursorCursors *cursors);
   261  
   262  /*
   263   * Manage Animate objects
   264   */
   265  XcursorAnimate *
   266  XcursorAnimateCreate (XcursorCursors *cursors);
   267  
   268  void
   269  XcursorAnimateDestroy (XcursorAnimate *animate);
   270  
   271  Cursor
   272  XcursorAnimateNext (XcursorAnimate *animate);
   273  
   274  /*
   275   * Manage Comment objects
   276   */
   277  XcursorComment *
   278  XcursorCommentCreate (XcursorUInt comment_type, int length);
   279  
   280  void
   281  XcursorCommentDestroy (XcursorComment *comment);
   282  
   283  XcursorComments *
   284  XcursorCommentsCreate (int size);
   285  
   286  void
   287  XcursorCommentsDestroy (XcursorComments *comments);
   288  
   289  /*
   290   * XcursorFile/Image APIs
   291   */
   292  XcursorImage *
   293  XcursorXcFileLoadImage (XcursorFile *file, int size);
   294  
   295  XcursorImages *
   296  XcursorXcFileLoadImages (XcursorFile *file, int size);
   297  
   298  XcursorImages *
   299  XcursorXcFileLoadAllImages (XcursorFile *file);
   300  
   301  XcursorBool
   302  XcursorXcFileLoad (XcursorFile	    *file,
   303  		   XcursorComments  **commentsp,
   304  		   XcursorImages    **imagesp);
   305  
   306  XcursorBool
   307  XcursorXcFileSave (XcursorFile		    *file,
   308  		   const XcursorComments    *comments,
   309  		   const XcursorImages	    *images);
   310  
   311  /*
   312   * FILE/Image APIs
   313   */
   314  XcursorImage *
   315  XcursorFileLoadImage (FILE *file, int size);
   316  
   317  XcursorImages *
   318  XcursorFileLoadImages (FILE *file, int size);
   319  
   320  XcursorImages *
   321  XcursorFileLoadAllImages (FILE *file);
   322  
   323  XcursorBool
   324  XcursorFileLoad (FILE		    *file,
   325  		 XcursorComments    **commentsp,
   326  		 XcursorImages	    **imagesp);
   327  
   328  XcursorBool
   329  XcursorFileSaveImages (FILE *file, const XcursorImages *images);
   330  
   331  XcursorBool
   332  XcursorFileSave (FILE *			file,
   333  		 const XcursorComments	*comments,
   334  		 const XcursorImages	*images);
   335  
   336  /*
   337   * Filename/Image APIs
   338   */
   339  XcursorImage *
   340  XcursorFilenameLoadImage (const char *filename, int size);
   341  
   342  XcursorImages *
   343  XcursorFilenameLoadImages (const char *filename, int size);
   344  
   345  XcursorImages *
   346  XcursorFilenameLoadAllImages (const char *filename);
   347  
   348  XcursorBool
   349  XcursorFilenameLoad (const char		*file,
   350  		     XcursorComments	**commentsp,
   351  		     XcursorImages	**imagesp);
   352  
   353  XcursorBool
   354  XcursorFilenameSaveImages (const char *filename, const XcursorImages *images);
   355  
   356  XcursorBool
   357  XcursorFilenameSave (const char		    *file,
   358  		     const XcursorComments  *comments,
   359  		     const XcursorImages    *images);
   360  
   361  /*
   362   * Library/Image APIs
   363   */
   364  XcursorImage *
   365  XcursorLibraryLoadImage (const char *library, const char *theme, int size);
   366  
   367  XcursorImages *
   368  XcursorLibraryLoadImages (const char *library, const char *theme, int size);
   369  
   370  /*
   371   * Library/shape API
   372   */
   373  
   374  const char *
   375  XcursorLibraryPath (void);
   376  
   377  int
   378  XcursorLibraryShape (const char *library);
   379  
   380  /*
   381   * Image/Cursor APIs
   382   */
   383  
   384  Cursor
   385  XcursorImageLoadCursor (Display *dpy, const XcursorImage *image);
   386  
   387  XcursorCursors *
   388  XcursorImagesLoadCursors (Display *dpy, const XcursorImages *images);
   389  
   390  Cursor
   391  XcursorImagesLoadCursor (Display *dpy, const XcursorImages *images);
   392  
   393  /*
   394   * Filename/Cursor APIs
   395   */
   396  Cursor
   397  XcursorFilenameLoadCursor (Display *dpy, const char *file);
   398  
   399  XcursorCursors *
   400  XcursorFilenameLoadCursors (Display *dpy, const char *file);
   401  
   402  /*
   403   * Library/Cursor APIs
   404   */
   405  Cursor
   406  XcursorLibraryLoadCursor (Display *dpy, const char *file);
   407  
   408  XcursorCursors *
   409  XcursorLibraryLoadCursors (Display *dpy, const char *file);
   410  
   411  /*
   412   * Shape/Image APIs
   413   */
   414  
   415  XcursorImage *
   416  XcursorShapeLoadImage (unsigned int shape, const char *theme, int size);
   417  
   418  XcursorImages *
   419  XcursorShapeLoadImages (unsigned int shape, const char *theme, int size);
   420  
   421  /*
   422   * Shape/Cursor APIs
   423   */
   424  Cursor
   425  XcursorShapeLoadCursor (Display *dpy, unsigned int shape);
   426  
   427  XcursorCursors *
   428  XcursorShapeLoadCursors (Display *dpy, unsigned int shape);
   429  
   430  /*
   431   * This is the function called by Xlib when attempting to
   432   * load cursors from XCreateGlyphCursor.  The interface must
   433   * not change as Xlib loads 'libXcursor.so' instead of
   434   * a specific major version
   435   */
   436  Cursor
   437  XcursorTryShapeCursor (Display	    *dpy,
   438  		       Font	    source_font,
   439  		       Font	    mask_font,
   440  		       unsigned int source_char,
   441  		       unsigned int mask_char,
   442  		       XColor _Xconst *foreground,
   443  		       XColor _Xconst *background);
   444  
   445  void
   446  XcursorNoticeCreateBitmap (Display	*dpy,
   447  			   Pixmap	pid,
   448  			   unsigned int width,
   449  			   unsigned int height);
   450  
   451  void
   452  XcursorNoticePutBitmap (Display	    *dpy,
   453  			Drawable    draw,
   454  			XImage	    *image);
   455  
   456  Cursor
   457  XcursorTryShapeBitmapCursor (Display		*dpy,
   458  			     Pixmap		source,
   459  			     Pixmap		mask,
   460  			     XColor		*foreground,
   461  			     XColor		*background,
   462  			     unsigned int	x,
   463  			     unsigned int	y);
   464  
   465  #define XCURSOR_BITMAP_HASH_SIZE    16
   466  
   467  void
   468  XcursorImageHash (XImage	*image,
   469  		  unsigned char	hash[XCURSOR_BITMAP_HASH_SIZE]);
   470  
   471  /*
   472   * Display information APIs
   473   */
   474  XcursorBool
   475  XcursorSupportsARGB (Display *dpy);
   476  
   477  XcursorBool
   478  XcursorSupportsAnim (Display *dpy);
   479  
   480  XcursorBool
   481  XcursorSetDefaultSize (Display *dpy, int size);
   482  
   483  int
   484  XcursorGetDefaultSize (Display *dpy);
   485  
   486  XcursorBool
   487  XcursorSetTheme (Display *dpy, const char *theme);
   488  
   489  char *
   490  XcursorGetTheme (Display *dpy);
   491  
   492  XcursorBool
   493  XcursorGetThemeCore (Display *dpy);
   494  
   495  XcursorBool
   496  XcursorSetThemeCore (Display *dpy, XcursorBool theme_core);
   497  
   498  _XFUNCPROTOEND
   499  
   500  #endif