mirror of
				https://github.com/godotengine/godot.git
				synced 2025-10-31 13:41:03 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			500 lines
		
	
	
	
		
			13 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			500 lines
		
	
	
	
		
			13 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| /* include/X11/Xcursor/Xcursor.h.  Generated from Xcursor.h.in by configure.  */
 | |
| /*
 | |
|  * Copyright © 2002 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.
 | |
|  */
 | |
| 
 | |
| #ifndef _XCURSOR_H_
 | |
| #define _XCURSOR_H_
 | |
| #include <stdio.h>
 | |
| #include <X11/Xfuncproto.h>
 | |
| #include <X11/Xlib.h>
 | |
| 
 | |
| typedef int		XcursorBool;
 | |
| typedef unsigned int	XcursorUInt;
 | |
| 
 | |
| typedef XcursorUInt	XcursorDim;
 | |
| typedef XcursorUInt	XcursorPixel;
 | |
| 
 | |
| #define XcursorTrue	1
 | |
| #define XcursorFalse	0
 | |
| 
 | |
| /*
 | |
|  * Cursor files start with a header.  The header
 | |
|  * contains a magic number, a version number and a
 | |
|  * table of contents which has type and offset information
 | |
|  * for the remaining tables in the file.
 | |
|  *
 | |
|  * File minor versions increment for compatible changes
 | |
|  * File major versions increment for incompatible changes (never, we hope)
 | |
|  *
 | |
|  * Chunks of the same type are always upward compatible.  Incompatible
 | |
|  * changes are made with new chunk types; the old data can remain under
 | |
|  * the old type.  Upward compatible changes can add header data as the
 | |
|  * header lengths are specified in the file.
 | |
|  *
 | |
|  *  File:
 | |
|  *	FileHeader
 | |
|  *	LISTofChunk
 | |
|  *
 | |
|  *  FileHeader:
 | |
|  *	CARD32		magic	    magic number
 | |
|  *	CARD32		header	    bytes in file header
 | |
|  *	CARD32		version	    file version
 | |
|  *	CARD32		ntoc	    number of toc entries
 | |
|  *	LISTofFileToc   toc	    table of contents
 | |
|  *
 | |
|  *  FileToc:
 | |
|  *	CARD32		type	    entry type
 | |
|  *	CARD32		subtype	    entry subtype (size for images)
 | |
|  *	CARD32		position    absolute file position
 | |
|  */
 | |
| 
 | |
| #define XCURSOR_MAGIC	0x72756358  /* "Xcur" LSBFirst */
 | |
| 
 | |
| /*
 | |
|  * Current Xcursor version number.  Will be substituted by configure
 | |
|  * from the version in the libXcursor configure.ac file.
 | |
|  */
 | |
| 
 | |
| #define XCURSOR_LIB_MAJOR 1
 | |
| #define XCURSOR_LIB_MINOR 2
 | |
| #define XCURSOR_LIB_REVISION 0
 | |
| #define XCURSOR_LIB_VERSION	((XCURSOR_LIB_MAJOR * 10000) + \
 | |
| 				 (XCURSOR_LIB_MINOR * 100) + \
 | |
| 				 (XCURSOR_LIB_REVISION))
 | |
| 
 | |
| /*
 | |
|  * This version number is stored in cursor files; changes to the
 | |
|  * file format require updating this version number
 | |
|  */
 | |
| #define XCURSOR_FILE_MAJOR	1
 | |
| #define XCURSOR_FILE_MINOR	0
 | |
| #define XCURSOR_FILE_VERSION	((XCURSOR_FILE_MAJOR << 16) | (XCURSOR_FILE_MINOR))
 | |
| #define XCURSOR_FILE_HEADER_LEN	(4 * 4)
 | |
| #define XCURSOR_FILE_TOC_LEN	(3 * 4)
 | |
| 
 | |
| typedef struct _XcursorFileToc {
 | |
|     XcursorUInt	    type;	/* chunk type */
 | |
|     XcursorUInt	    subtype;	/* subtype (size for images) */
 | |
|     XcursorUInt	    position;	/* absolute position in file */
 | |
| } XcursorFileToc;
 | |
| 
 | |
| typedef struct _XcursorFileHeader {
 | |
|     XcursorUInt	    magic;	/* magic number */
 | |
|     XcursorUInt	    header;	/* byte length of header */
 | |
|     XcursorUInt	    version;	/* file version number */
 | |
|     XcursorUInt	    ntoc;	/* number of toc entries */
 | |
|     XcursorFileToc  *tocs;	/* table of contents */
 | |
| } XcursorFileHeader;
 | |
| 
 | |
| /*
 | |
|  * The rest of the file is a list of chunks, each tagged by type
 | |
|  * and version.
 | |
|  *
 | |
|  *  Chunk:
 | |
|  *	ChunkHeader
 | |
|  *	<extra type-specific header fields>
 | |
|  *	<type-specific data>
 | |
|  *
 | |
|  *  ChunkHeader:
 | |
|  *	CARD32	    header	bytes in chunk header + type header
 | |
|  *	CARD32	    type	chunk type
 | |
|  *	CARD32	    subtype	chunk subtype
 | |
|  *	CARD32	    version	chunk type version
 | |
|  */
 | |
| 
 | |
| #define XCURSOR_CHUNK_HEADER_LEN    (4 * 4)
 | |
| 
 | |
| typedef struct _XcursorChunkHeader {
 | |
|     XcursorUInt	    header;	/* bytes in chunk header */
 | |
|     XcursorUInt	    type;	/* chunk type */
 | |
|     XcursorUInt	    subtype;	/* chunk subtype (size for images) */
 | |
|     XcursorUInt	    version;	/* version of this type */
 | |
| } XcursorChunkHeader;
 | |
| 
 | |
| /*
 | |
|  * Here's a list of the known chunk types
 | |
|  */
 | |
| 
 | |
| /*
 | |
|  * Comments consist of a 4-byte length field followed by
 | |
|  * UTF-8 encoded text
 | |
|  *
 | |
|  *  Comment:
 | |
|  *	ChunkHeader header	chunk header
 | |
|  *	CARD32	    length	bytes in text
 | |
|  *	LISTofCARD8 text	UTF-8 encoded text
 | |
|  */
 | |
| 
 | |
| #define XCURSOR_COMMENT_TYPE	    0xfffe0001
 | |
| #define XCURSOR_COMMENT_VERSION	    1
 | |
| #define XCURSOR_COMMENT_HEADER_LEN  (XCURSOR_CHUNK_HEADER_LEN + (1 *4))
 | |
| #define XCURSOR_COMMENT_COPYRIGHT   1
 | |
| #define XCURSOR_COMMENT_LICENSE	    2
 | |
| #define XCURSOR_COMMENT_OTHER	    3
 | |
| #define XCURSOR_COMMENT_MAX_LEN	    0x100000
 | |
| 
 | |
| typedef struct _XcursorComment {
 | |
|     XcursorUInt	    version;
 | |
|     XcursorUInt	    comment_type;
 | |
|     char	    *comment;
 | |
| } XcursorComment;
 | |
| 
 | |
| /*
 | |
|  * Each cursor image occupies a separate image chunk.
 | |
|  * The length of the image header follows the chunk header
 | |
|  * so that future versions can extend the header without
 | |
|  * breaking older applications
 | |
|  *
 | |
|  *  Image:
 | |
|  *	ChunkHeader	header	chunk header
 | |
|  *	CARD32		width	actual width
 | |
|  *	CARD32		height	actual height
 | |
|  *	CARD32		xhot	hot spot x
 | |
|  *	CARD32		yhot	hot spot y
 | |
|  *	CARD32		delay	animation delay
 | |
|  *	LISTofCARD32	pixels	ARGB pixels
 | |
|  */
 | |
| 
 | |
| #define XCURSOR_IMAGE_TYPE    	    0xfffd0002
 | |
| #define XCURSOR_IMAGE_VERSION	    1
 | |
| #define XCURSOR_IMAGE_HEADER_LEN    (XCURSOR_CHUNK_HEADER_LEN + (5*4))
 | |
| #define XCURSOR_IMAGE_MAX_SIZE	    0x7fff	/* 32767x32767 max cursor size */
 | |
| 
 | |
| typedef struct _XcursorImage {
 | |
|     XcursorUInt	    version;	/* version of the image data */
 | |
|     XcursorDim	    size;	/* nominal size for matching */
 | |
|     XcursorDim	    width;	/* actual width */
 | |
|     XcursorDim	    height;	/* actual height */
 | |
|     XcursorDim	    xhot;	/* hot spot x (must be inside image) */
 | |
|     XcursorDim	    yhot;	/* hot spot y (must be inside image) */
 | |
|     XcursorUInt	    delay;	/* animation delay to next frame (ms) */
 | |
|     XcursorPixel    *pixels;	/* pointer to pixels */
 | |
| } XcursorImage;
 | |
| 
 | |
| /*
 | |
|  * Other data structures exposed by the library API
 | |
|  */
 | |
| typedef struct _XcursorImages {
 | |
|     int		    nimage;	/* number of images */
 | |
|     XcursorImage    **images;	/* array of XcursorImage pointers */
 | |
|     char	    *name;	/* name used to load images */
 | |
| } XcursorImages;
 | |
| 
 | |
| typedef struct _XcursorCursors {
 | |
|     Display	    *dpy;	/* Display holding cursors */
 | |
|     int		    ref;	/* reference count */
 | |
|     int		    ncursor;	/* number of cursors */
 | |
|     Cursor	    *cursors;	/* array of cursors */
 | |
| } XcursorCursors;
 | |
| 
 | |
| typedef struct _XcursorAnimate {
 | |
|     XcursorCursors   *cursors;	/* list of cursors to use */
 | |
|     int		    sequence;	/* which cursor is next */
 | |
| } XcursorAnimate;
 | |
| 
 | |
| typedef struct _XcursorFile XcursorFile;
 | |
| 
 | |
| struct _XcursorFile {
 | |
|     void    *closure;
 | |
|     int	    (*read)  (XcursorFile *file, unsigned char *buf, int len);
 | |
|     int	    (*write) (XcursorFile *file, unsigned char *buf, int len);
 | |
|     int	    (*seek)  (XcursorFile *file, long offset, int whence);
 | |
| };
 | |
| 
 | |
| typedef struct _XcursorComments {
 | |
|     int		    ncomment;	/* number of comments */
 | |
|     XcursorComment  **comments;	/* array of XcursorComment pointers */
 | |
| } XcursorComments;
 | |
| 
 | |
| #define XCURSOR_CORE_THEME  "core"
 | |
| 
 | |
| _XFUNCPROTOBEGIN
 | |
| 
 | |
| /*
 | |
|  * Manage Image objects
 | |
|  */
 | |
| XcursorImage *
 | |
| XcursorImageCreate (int width, int height);
 | |
| 
 | |
| void
 | |
| XcursorImageDestroy (XcursorImage *image);
 | |
| 
 | |
| /*
 | |
|  * Manage Images objects
 | |
|  */
 | |
| XcursorImages *
 | |
| XcursorImagesCreate (int size);
 | |
| 
 | |
| void
 | |
| XcursorImagesDestroy (XcursorImages *images);
 | |
| 
 | |
| void
 | |
| XcursorImagesSetName (XcursorImages *images, const char *name);
 | |
| 
 | |
| /*
 | |
|  * Manage Cursor objects
 | |
|  */
 | |
| XcursorCursors *
 | |
| XcursorCursorsCreate (Display *dpy, int size);
 | |
| 
 | |
| void
 | |
| XcursorCursorsDestroy (XcursorCursors *cursors);
 | |
| 
 | |
| /*
 | |
|  * Manage Animate objects
 | |
|  */
 | |
| XcursorAnimate *
 | |
| XcursorAnimateCreate (XcursorCursors *cursors);
 | |
| 
 | |
| void
 | |
| XcursorAnimateDestroy (XcursorAnimate *animate);
 | |
| 
 | |
| Cursor
 | |
| XcursorAnimateNext (XcursorAnimate *animate);
 | |
| 
 | |
| /*
 | |
|  * Manage Comment objects
 | |
|  */
 | |
| XcursorComment *
 | |
| XcursorCommentCreate (XcursorUInt comment_type, int length);
 | |
| 
 | |
| void
 | |
| XcursorCommentDestroy (XcursorComment *comment);
 | |
| 
 | |
| XcursorComments *
 | |
| XcursorCommentsCreate (int size);
 | |
| 
 | |
| void
 | |
| XcursorCommentsDestroy (XcursorComments *comments);
 | |
| 
 | |
| /*
 | |
|  * XcursorFile/Image APIs
 | |
|  */
 | |
| XcursorImage *
 | |
| XcursorXcFileLoadImage (XcursorFile *file, int size);
 | |
| 
 | |
| XcursorImages *
 | |
| XcursorXcFileLoadImages (XcursorFile *file, int size);
 | |
| 
 | |
| XcursorImages *
 | |
| XcursorXcFileLoadAllImages (XcursorFile *file);
 | |
| 
 | |
| XcursorBool
 | |
| XcursorXcFileLoad (XcursorFile	    *file,
 | |
| 		   XcursorComments  **commentsp,
 | |
| 		   XcursorImages    **imagesp);
 | |
| 
 | |
| XcursorBool
 | |
| XcursorXcFileSave (XcursorFile		    *file,
 | |
| 		   const XcursorComments    *comments,
 | |
| 		   const XcursorImages	    *images);
 | |
| 
 | |
| /*
 | |
|  * FILE/Image APIs
 | |
|  */
 | |
| XcursorImage *
 | |
| XcursorFileLoadImage (FILE *file, int size);
 | |
| 
 | |
| XcursorImages *
 | |
| XcursorFileLoadImages (FILE *file, int size);
 | |
| 
 | |
| XcursorImages *
 | |
| XcursorFileLoadAllImages (FILE *file);
 | |
| 
 | |
| XcursorBool
 | |
| XcursorFileLoad (FILE		    *file,
 | |
| 		 XcursorComments    **commentsp,
 | |
| 		 XcursorImages	    **imagesp);
 | |
| 
 | |
| XcursorBool
 | |
| XcursorFileSaveImages (FILE *file, const XcursorImages *images);
 | |
| 
 | |
| XcursorBool
 | |
| XcursorFileSave (FILE *			file,
 | |
| 		 const XcursorComments	*comments,
 | |
| 		 const XcursorImages	*images);
 | |
| 
 | |
| /*
 | |
|  * Filename/Image APIs
 | |
|  */
 | |
| XcursorImage *
 | |
| XcursorFilenameLoadImage (const char *filename, int size);
 | |
| 
 | |
| XcursorImages *
 | |
| XcursorFilenameLoadImages (const char *filename, int size);
 | |
| 
 | |
| XcursorImages *
 | |
| XcursorFilenameLoadAllImages (const char *filename);
 | |
| 
 | |
| XcursorBool
 | |
| XcursorFilenameLoad (const char		*file,
 | |
| 		     XcursorComments	**commentsp,
 | |
| 		     XcursorImages	**imagesp);
 | |
| 
 | |
| XcursorBool
 | |
| XcursorFilenameSaveImages (const char *filename, const XcursorImages *images);
 | |
| 
 | |
| XcursorBool
 | |
| XcursorFilenameSave (const char		    *file,
 | |
| 		     const XcursorComments  *comments,
 | |
| 		     const XcursorImages    *images);
 | |
| 
 | |
| /*
 | |
|  * Library/Image APIs
 | |
|  */
 | |
| XcursorImage *
 | |
| XcursorLibraryLoadImage (const char *library, const char *theme, int size);
 | |
| 
 | |
| XcursorImages *
 | |
| XcursorLibraryLoadImages (const char *library, const char *theme, int size);
 | |
| 
 | |
| /*
 | |
|  * Library/shape API
 | |
|  */
 | |
| 
 | |
| const char *
 | |
| XcursorLibraryPath (void);
 | |
| 
 | |
| int
 | |
| XcursorLibraryShape (const char *library);
 | |
| 
 | |
| /*
 | |
|  * Image/Cursor APIs
 | |
|  */
 | |
| 
 | |
| Cursor
 | |
| XcursorImageLoadCursor (Display *dpy, const XcursorImage *image);
 | |
| 
 | |
| XcursorCursors *
 | |
| XcursorImagesLoadCursors (Display *dpy, const XcursorImages *images);
 | |
| 
 | |
| Cursor
 | |
| XcursorImagesLoadCursor (Display *dpy, const XcursorImages *images);
 | |
| 
 | |
| /*
 | |
|  * Filename/Cursor APIs
 | |
|  */
 | |
| Cursor
 | |
| XcursorFilenameLoadCursor (Display *dpy, const char *file);
 | |
| 
 | |
| XcursorCursors *
 | |
| XcursorFilenameLoadCursors (Display *dpy, const char *file);
 | |
| 
 | |
| /*
 | |
|  * Library/Cursor APIs
 | |
|  */
 | |
| Cursor
 | |
| XcursorLibraryLoadCursor (Display *dpy, const char *file);
 | |
| 
 | |
| XcursorCursors *
 | |
| XcursorLibraryLoadCursors (Display *dpy, const char *file);
 | |
| 
 | |
| /*
 | |
|  * Shape/Image APIs
 | |
|  */
 | |
| 
 | |
| XcursorImage *
 | |
| XcursorShapeLoadImage (unsigned int shape, const char *theme, int size);
 | |
| 
 | |
| XcursorImages *
 | |
| XcursorShapeLoadImages (unsigned int shape, const char *theme, int size);
 | |
| 
 | |
| /*
 | |
|  * Shape/Cursor APIs
 | |
|  */
 | |
| Cursor
 | |
| XcursorShapeLoadCursor (Display *dpy, unsigned int shape);
 | |
| 
 | |
| XcursorCursors *
 | |
| XcursorShapeLoadCursors (Display *dpy, unsigned int shape);
 | |
| 
 | |
| /*
 | |
|  * This is the function called by Xlib when attempting to
 | |
|  * load cursors from XCreateGlyphCursor.  The interface must
 | |
|  * not change as Xlib loads 'libXcursor.so' instead of
 | |
|  * a specific major version
 | |
|  */
 | |
| Cursor
 | |
| XcursorTryShapeCursor (Display	    *dpy,
 | |
| 		       Font	    source_font,
 | |
| 		       Font	    mask_font,
 | |
| 		       unsigned int source_char,
 | |
| 		       unsigned int mask_char,
 | |
| 		       XColor _Xconst *foreground,
 | |
| 		       XColor _Xconst *background);
 | |
| 
 | |
| void
 | |
| XcursorNoticeCreateBitmap (Display	*dpy,
 | |
| 			   Pixmap	pid,
 | |
| 			   unsigned int width,
 | |
| 			   unsigned int height);
 | |
| 
 | |
| void
 | |
| XcursorNoticePutBitmap (Display	    *dpy,
 | |
| 			Drawable    draw,
 | |
| 			XImage	    *image);
 | |
| 
 | |
| Cursor
 | |
| XcursorTryShapeBitmapCursor (Display		*dpy,
 | |
| 			     Pixmap		source,
 | |
| 			     Pixmap		mask,
 | |
| 			     XColor		*foreground,
 | |
| 			     XColor		*background,
 | |
| 			     unsigned int	x,
 | |
| 			     unsigned int	y);
 | |
| 
 | |
| #define XCURSOR_BITMAP_HASH_SIZE    16
 | |
| 
 | |
| void
 | |
| XcursorImageHash (XImage	*image,
 | |
| 		  unsigned char	hash[XCURSOR_BITMAP_HASH_SIZE]);
 | |
| 
 | |
| /*
 | |
|  * Display information APIs
 | |
|  */
 | |
| XcursorBool
 | |
| XcursorSupportsARGB (Display *dpy);
 | |
| 
 | |
| XcursorBool
 | |
| XcursorSupportsAnim (Display *dpy);
 | |
| 
 | |
| XcursorBool
 | |
| XcursorSetDefaultSize (Display *dpy, int size);
 | |
| 
 | |
| int
 | |
| XcursorGetDefaultSize (Display *dpy);
 | |
| 
 | |
| XcursorBool
 | |
| XcursorSetTheme (Display *dpy, const char *theme);
 | |
| 
 | |
| char *
 | |
| XcursorGetTheme (Display *dpy);
 | |
| 
 | |
| XcursorBool
 | |
| XcursorGetThemeCore (Display *dpy);
 | |
| 
 | |
| XcursorBool
 | |
| XcursorSetThemeCore (Display *dpy, XcursorBool theme_core);
 | |
| 
 | |
| _XFUNCPROTOEND
 | |
| 
 | |
| #endif
 | 
