xcursorint.h revision 0ea508b1
17914d74bSmrg/* 27914d74bSmrg * Copyright © 2002 Keith Packard 37914d74bSmrg * 47914d74bSmrg * Permission to use, copy, modify, distribute, and sell this software and its 57914d74bSmrg * documentation for any purpose is hereby granted without fee, provided that 67914d74bSmrg * the above copyright notice appear in all copies and that both that 77914d74bSmrg * copyright notice and this permission notice appear in supporting 87914d74bSmrg * documentation, and that the name of Keith Packard not be used in 97914d74bSmrg * advertising or publicity pertaining to distribution of the software without 107914d74bSmrg * specific, written prior permission. Keith Packard makes no 117914d74bSmrg * representations about the suitability of this software for any purpose. It 127914d74bSmrg * is provided "as is" without express or implied warranty. 137914d74bSmrg * 147914d74bSmrg * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, 157914d74bSmrg * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO 167914d74bSmrg * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR 177914d74bSmrg * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, 187914d74bSmrg * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER 197914d74bSmrg * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR 207914d74bSmrg * PERFORMANCE OF THIS SOFTWARE. 217914d74bSmrg */ 227914d74bSmrg 237914d74bSmrg#ifndef _XCURSORINT_H_ 247914d74bSmrg#define _XCURSORINT_H_ 257914d74bSmrg 267914d74bSmrg#ifdef HAVE_CONFIG_H 277914d74bSmrg#include "config.h" 287914d74bSmrg#endif 29e6d5e4e0Smrg 307914d74bSmrg#include <X11/Xlib.h> 317914d74bSmrg#include <X11/cursorfont.h> 327914d74bSmrg#include <X11/extensions/Xrender.h> 337914d74bSmrg 347914d74bSmrg#ifdef HAVE_XFIXES 357914d74bSmrg#include <X11/extensions/Xfixes.h> 367914d74bSmrg#endif 377914d74bSmrg 387914d74bSmrg#include "Xcursor.h" 390ea508b1Smrg 400ea508b1Smrg#include <fcntl.h> 410ea508b1Smrg#ifdef O_CLOEXEC 420ea508b1Smrg#define FOPEN_CLOEXEC "e" 430ea508b1Smrg#else 440ea508b1Smrg#define FOPEN_CLOEXEC "" 450ea508b1Smrg#endif 467914d74bSmrg 477914d74bSmrgtypedef struct _XcursorFontInfo { 487914d74bSmrg struct _XcursorFontInfo *next; 497914d74bSmrg Font font; 507914d74bSmrg XcursorBool is_cursor_font; 517914d74bSmrg} XcursorFontInfo; 527914d74bSmrg 537914d74bSmrg/* 547914d74bSmrg * Track a few recently created bitmaps to see 557914d74bSmrg * if they get used to create cursors. This 567914d74bSmrg * is done by hooking into Xlib and watching 577914d74bSmrg * for XCreatePixmap, XPutImage, XCreatePixmapCursor 587914d74bSmrg * with appropriate arguments. When this happens 597914d74bSmrg * Xcursor computes a hash value for the source image 607914d74bSmrg * and tries to load a library cursor of that name. 617914d74bSmrg */ 62e6d5e4e0Smrg 637914d74bSmrg/* large bitmaps are unlikely to be cursors */ 647914d74bSmrg#define MAX_BITMAP_CURSOR_SIZE 64 657914d74bSmrg/* don't need to remember very many; in fact, 2 is likely sufficient */ 667914d74bSmrg#define NUM_BITMAPS 8 677914d74bSmrg 687914d74bSmrgtypedef struct _XcursorBitmapInfo { 697914d74bSmrg Pixmap bitmap; 707914d74bSmrg unsigned long sequence; 717914d74bSmrg unsigned int width, height; 727914d74bSmrg Bool has_image; 737914d74bSmrg unsigned char hash[XCURSOR_BITMAP_HASH_SIZE]; 747914d74bSmrg} XcursorBitmapInfo; 757914d74bSmrg 767914d74bSmrgtypedef enum _XcursorDither { 777914d74bSmrg XcursorDitherThreshold, 787914d74bSmrg XcursorDitherMedian, 797914d74bSmrg XcursorDitherOrdered, 807914d74bSmrg XcursorDitherDiffuse 817914d74bSmrg} XcursorDither; 827914d74bSmrg 837914d74bSmrgtypedef struct _XcursorDisplayInfo { 847914d74bSmrg struct _XcursorDisplayInfo *next; 857914d74bSmrg Display *display; 867914d74bSmrg XExtCodes *codes; 877914d74bSmrg XcursorBool has_render_cursor; 887914d74bSmrg XcursorBool has_anim_cursor; 897914d74bSmrg XcursorBool theme_core; 907914d74bSmrg int size; 917914d74bSmrg XcursorFontInfo *fonts; 927914d74bSmrg char *theme; 937914d74bSmrg char *theme_from_config; 947914d74bSmrg XcursorDither dither; 957914d74bSmrg XcursorBitmapInfo bitmaps[NUM_BITMAPS]; 967914d74bSmrg} XcursorDisplayInfo; 977914d74bSmrg 987914d74bSmrgXcursorDisplayInfo * 997914d74bSmrg_XcursorGetDisplayInfo (Display *dpy); 1007914d74bSmrg 1017914d74bSmrgCursor 1027914d74bSmrg_XcursorCreateGlyphCursor(Display *dpy, 1037914d74bSmrg Font source_font, 1047914d74bSmrg Font mask_font, 1057914d74bSmrg unsigned int source_char, 1067914d74bSmrg unsigned int mask_char, 1077914d74bSmrg XColor _Xconst *foreground, 1087914d74bSmrg XColor _Xconst *background); 1097914d74bSmrg 1107914d74bSmrgCursor 1117914d74bSmrg_XcursorCreateFontCursor (Display *dpy, unsigned int shape); 112e6d5e4e0Smrg 1137914d74bSmrg#endif /* _XCURSORINT_H_ */ 114