Viewing file: Xcursor.h (12.11 KB) -r--r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
/* * $XFree86: xc/lib/Xcursor/Xcursor.h,v 1.4 2003/01/26 03:22:42 eich Exp $ * * Copyright © 2002 Keith Packard, member of The XFree86 Project, Inc. * * 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>
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 */
#define XCURSOR_MAJOR 1 #define XCURSOR_MINOR 0 #define XCURSOR_VERSION ((XCURSOR_MAJOR << 16) | (XCURSOR_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 */ } 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);
/* * 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 */ 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
|