Import Xcursor 1.1.4 from freedesktop.org xlibs tree.

This commit is contained in:
Daniel Stone 2005-06-29 18:46:53 +00:00
parent e67de73f5c
commit caa910e492
7 changed files with 159 additions and 12 deletions

View file

@ -1,4 +1,5 @@
/*
* $Id$
*
* Copyright © 2002 Keith Packard
*
@ -76,7 +77,7 @@ typedef XcursorUInt XcursorPixel;
#define XCURSOR_LIB_MAJOR 1
#define XCURSOR_LIB_MINOR 1
#define XCURSOR_LIB_REVISION 2
#define XCURSOR_LIB_REVISION 4
#define XCURSOR_LIB_VERSION ((XCURSOR_LIB_MAJOR * 10000) + \
(XCURSOR_LIB_MINOR * 100) + \
(XCURSOR_LIB_REVISION))

View file

@ -1,4 +1,5 @@
/*
* $Id$
*
* Copyright © 2002 Keith Packard
*

View file

@ -1,4 +1,5 @@
/*
* $Id$
*
* Copyright © 2002 Keith Packard
*

View file

@ -1,4 +1,5 @@
/*
* $Id$
*
* Copyright © 2002 Keith Packard
*
@ -46,7 +47,8 @@ XcursorImageCreate (int width, int height)
void
XcursorImageDestroy (XcursorImage *image)
{
free (image);
if (image)
free (image);
}
XcursorImages *
@ -69,6 +71,9 @@ XcursorImagesDestroy (XcursorImages *images)
{
int n;
if (!images)
return;
for (n = 0; n < images->nimage; n++)
XcursorImageDestroy (images->images[n]);
if (images->name)
@ -79,10 +84,16 @@ XcursorImagesDestroy (XcursorImages *images)
void
XcursorImagesSetName (XcursorImages *images, const char *name)
{
char *new = malloc (strlen (name) + 1);
char *new;
if (!images || !name)
return;
new = malloc (strlen (name) + 1);
if (!new)
return;
strcpy (new, name);
if (images->name)
free (images->name);
@ -110,7 +121,8 @@ XcursorCommentCreate (XcursorUInt comment_type, int length)
void
XcursorCommentDestroy (XcursorComment *comment)
{
free (comment);
if (!comment)
free (comment);
}
XcursorComments *
@ -132,6 +144,9 @@ XcursorCommentsDestroy (XcursorComments *comments)
{
int n;
if (!comments)
return;
for (n = 0; n < comments->ncomment; n++)
XcursorCommentDestroy (comments->comments[n]);
free (comments);
@ -142,6 +157,9 @@ _XcursorReadUInt (XcursorFile *file, XcursorUInt *u)
{
unsigned char bytes[4];
if (!file || !u)
return XcursorFalse;
if ((*file->read) (file, bytes, 4) != 4)
return XcursorFalse;
*u = ((bytes[0] << 0) |
@ -154,7 +172,7 @@ _XcursorReadUInt (XcursorFile *file, XcursorUInt *u)
static XcursorBool
_XcursorReadBytes (XcursorFile *file, char *bytes, int length)
{
if ((*file->read) (file, (unsigned char *) bytes, length) != length)
if (!file || !bytes || (*file->read) (file, (unsigned char *) bytes, length) != length)
return XcursorFalse;
return XcursorTrue;
}
@ -164,6 +182,9 @@ _XcursorWriteUInt (XcursorFile *file, XcursorUInt u)
{
unsigned char bytes[4];
if (!file)
return XcursorFalse;
bytes[0] = u;
bytes[1] = u >> 8;
bytes[2] = u >> 16;
@ -176,7 +197,7 @@ _XcursorWriteUInt (XcursorFile *file, XcursorUInt u)
static XcursorBool
_XcursorWriteBytes (XcursorFile *file, char *bytes, int length)
{
if ((*file->write) (file, (unsigned char *) bytes, length) != length)
if (!file || !bytes || (*file->write) (file, (unsigned char *) bytes, length) != length)
return XcursorFalse;
return XcursorTrue;
}
@ -184,7 +205,8 @@ _XcursorWriteBytes (XcursorFile *file, char *bytes, int length)
static void
_XcursorFileHeaderDestroy (XcursorFileHeader *fileHeader)
{
free (fileHeader);
if (!fileHeader)
free (fileHeader);
}
static XcursorFileHeader *
@ -212,6 +234,9 @@ _XcursorReadFileHeader (XcursorFile *file)
XcursorFileHeader head, *fileHeader;
XcursorUInt skip;
int n;
if (!file)
return NULL;
if (!_XcursorReadUInt (file, &head.magic))
return 0;
@ -262,6 +287,9 @@ static XcursorBool
_XcursorWriteFileHeader (XcursorFile *file, XcursorFileHeader *fileHeader)
{
int toc;
if (!file || !fileHeader)
return XcursorFalse;
if (!_XcursorWriteUInt (file, fileHeader->magic))
return XcursorFalse;
@ -288,7 +316,8 @@ _XcursorSeekToToc (XcursorFile *file,
XcursorFileHeader *fileHeader,
int toc)
{
if ((*file->seek) (file, fileHeader->tocs[toc].position, SEEK_SET) == EOF)
if (!file || !fileHeader || \
(*file->seek) (file, fileHeader->tocs[toc].position, SEEK_SET) == EOF)
return XcursorFalse;
return XcursorTrue;
}
@ -299,6 +328,8 @@ _XcursorFileReadChunkHeader (XcursorFile *file,
int toc,
XcursorChunkHeader *chunkHeader)
{
if (!file || !fileHeader || !chunkHeader)
return XcursorFalse;
if (!_XcursorSeekToToc (file, fileHeader, toc))
return XcursorFalse;
if (!_XcursorReadUInt (file, &chunkHeader->header))
@ -322,6 +353,8 @@ _XcursorFileWriteChunkHeader (XcursorFile *file,
int toc,
XcursorChunkHeader *chunkHeader)
{
if (!file || !fileHeader || !chunkHeader)
return XcursorFalse;
if (!_XcursorSeekToToc (file, fileHeader, toc))
return XcursorFalse;
if (!_XcursorWriteUInt (file, chunkHeader->header))
@ -347,6 +380,9 @@ _XcursorFindBestSize (XcursorFileHeader *fileHeader,
XcursorDim bestSize = 0;
XcursorDim thisSize;
if (!fileHeader || !nsizesp)
return 0;
for (n = 0; n < fileHeader->ntoc; n++)
{
if (fileHeader->tocs[n].type != XCURSOR_IMAGE_TYPE)
@ -372,6 +408,9 @@ _XcursorFindImageToc (XcursorFileHeader *fileHeader,
int toc;
XcursorDim thisSize;
if (!fileHeader)
return 0;
for (toc = 0; toc < fileHeader->ntoc; toc++)
{
if (fileHeader->tocs[toc].type != XCURSOR_IMAGE_TYPE)
@ -399,6 +438,9 @@ _XcursorReadImage (XcursorFile *file,
int n;
XcursorPixel *p;
if (!file || !fileHeader)
return NULL;
if (!_XcursorFileReadChunkHeader (file, fileHeader, toc, &chunkHeader))
return 0;
if (!_XcursorReadUInt (file, &head.width))
@ -444,6 +486,9 @@ _XcursorReadImage (XcursorFile *file,
static XcursorUInt
_XcursorImageLength (XcursorImage *image)
{
if (!image)
return 0;
return XCURSOR_IMAGE_HEADER_LEN + (image->width * image->height) * 4;
}
@ -457,6 +502,9 @@ _XcursorWriteImage (XcursorFile *file,
int n;
XcursorPixel *p;
if (!file || !fileHeader || !image)
return XcursorFalse;
/* sanity check data */
if (image->width > XCURSOR_IMAGE_MAX_SIZE ||
image->height > XCURSOR_IMAGE_MAX_SIZE)
@ -508,6 +556,9 @@ _XcursorReadComment (XcursorFile *file,
XcursorUInt length;
XcursorComment *comment;
if (!file || !fileHeader)
return NULL;
/* read chunk header */
if (!_XcursorFileReadChunkHeader (file, fileHeader, toc, &chunkHeader))
return 0;
@ -541,6 +592,9 @@ _XcursorWriteComment (XcursorFile *file,
XcursorChunkHeader chunkHeader;
XcursorUInt length;
if (!file || !fileHeader || !comment || !comment->comment)
return XcursorFalse;
length = strlen (comment->comment);
/* sanity check data */
@ -600,7 +654,7 @@ XcursorXcFileLoadImages (XcursorFile *file, int size)
int n;
int toc;
if (size < 0)
if (!file || size < 0)
return 0;
fileHeader = _XcursorReadFileHeader (file);
if (!fileHeader)
@ -641,6 +695,9 @@ XcursorXcFileLoadAllImages (XcursorFile *file)
int n;
int toc;
if (!file)
return 0;
fileHeader = _XcursorReadFileHeader (file);
if (!fileHeader)
return 0;
@ -692,6 +749,8 @@ XcursorXcFileLoad (XcursorFile *file,
XcursorComments *comments;
int toc;
if (!file)
return 0;
fileHeader = _XcursorReadFileHeader (file);
if (!fileHeader)
return 0;
@ -762,6 +821,9 @@ XcursorXcFileSave (XcursorFile *file,
int n;
int toc;
if (!file || !comments || !images)
return XcursorFalse;
fileHeader = _XcursorFileHeaderCreate (comments->ncomment + images->nimage);
if (!fileHeader)
return XcursorFalse;
@ -861,6 +923,9 @@ XcursorFileLoadImage (FILE *file, int size)
{
XcursorFile f;
if (!file)
return NULL;
_XcursorStdioFileInitialize (file, &f);
return XcursorXcFileLoadImage (&f, size);
}
@ -870,6 +935,9 @@ XcursorFileLoadImages (FILE *file, int size)
{
XcursorFile f;
if (!file)
return NULL;
_XcursorStdioFileInitialize (file, &f);
return XcursorXcFileLoadImages (&f, size);
}
@ -879,6 +947,9 @@ XcursorFileLoadAllImages (FILE *file)
{
XcursorFile f;
if (!file)
return NULL;
_XcursorStdioFileInitialize (file, &f);
return XcursorXcFileLoadAllImages (&f);
}
@ -890,6 +961,9 @@ XcursorFileLoad (FILE *file,
{
XcursorFile f;
if (!file || !commentsp || !imagesp)
return XcursorFalse;
_XcursorStdioFileInitialize (file, &f);
return XcursorXcFileLoad (&f, commentsp, imagesp);
}
@ -900,7 +974,7 @@ XcursorFileSaveImages (FILE *file, const XcursorImages *images)
XcursorComments *comments = XcursorCommentsCreate (0);
XcursorFile f;
XcursorBool ret;
if (!comments)
if (!comments || !file || !images)
return 0;
_XcursorStdioFileInitialize (file, &f);
ret = XcursorXcFileSave (&f, comments, images) && fflush (file) != EOF;
@ -914,6 +988,9 @@ XcursorFileSave (FILE * file,
const XcursorImages *images)
{
XcursorFile f;
if (!file || !comments || !images)
return XcursorFalse;
_XcursorStdioFileInitialize (file, &f);
return XcursorXcFileSave (&f, comments, images) && fflush (file) != EOF;
@ -925,6 +1002,9 @@ XcursorFilenameLoadImage (const char *file, int size)
FILE *f;
XcursorImage *image;
if (!file || size < 0)
return NULL;
f = fopen (file, "r");
if (!f)
return 0;
@ -939,6 +1019,9 @@ XcursorFilenameLoadImages (const char *file, int size)
FILE *f;
XcursorImages *images;
if (!file || size < 0)
return NULL;
f = fopen (file, "r");
if (!f)
return 0;
@ -953,6 +1036,9 @@ XcursorFilenameLoadAllImages (const char *file)
FILE *f;
XcursorImages *images;
if (!file)
return NULL;
f = fopen (file, "r");
if (!f)
return 0;
@ -969,6 +1055,9 @@ XcursorFilenameLoad (const char *file,
FILE *f;
XcursorBool ret;
if (!file)
return XcursorFalse;
f = fopen (file, "r");
if (!f)
return 0;
@ -983,6 +1072,9 @@ XcursorFilenameSaveImages (const char *file, const XcursorImages *images)
FILE *f;
XcursorBool ret;
if (!file || !images)
return XcursorFalse;
f = fopen (file, "w");
if (!f)
return 0;
@ -998,10 +1090,12 @@ XcursorFilenameSave (const char *file,
FILE *f;
XcursorBool ret;
if (!file || !comments || !images)
return XcursorFalse;
f = fopen (file, "w");
if (!f)
return 0;
ret = XcursorFileSave (f, comments, images);
return fclose (f) != EOF && ret;
}

View file

@ -1,4 +1,5 @@
/*
* $Id$
*
* Copyright © 2002 Keith Packard
*
@ -80,6 +81,9 @@ _XcursorBuildThemeDir (const char *dir, const char *theme)
int themelen;
int len;
if (!dir || !theme)
return NULL;
colon = strchr (dir, ':');
if (!colon)
colon = dir + strlen (dir);
@ -127,6 +131,9 @@ _XcursorBuildFullname (const char *dir, const char *subdir, const char *file)
{
char *full;
if (!dir || !subdir || !file)
return NULL;
full = malloc (strlen (dir) + 1 + strlen (subdir) + 1 + strlen (file) + 1);
if (!full)
return 0;
@ -157,6 +164,9 @@ _XcursorThemeInherits (const char *full)
char *result = 0;
FILE *f;
if (!full)
return NULL;
f = fopen (full, "r");
if (f)
{
@ -207,6 +217,9 @@ XcursorScanTheme (const char *theme, const char *name)
char *inherits = 0;
const char *i;
if (!theme || !name)
return NULL;
/*
* XCURSOR_CORE_THEME is a magic name; cursors from the core set
* are never found in any directory. Instead, a magic value is
@ -259,6 +272,9 @@ XcursorLibraryLoadImage (const char *file, const char *theme, int size)
FILE *f = 0;
XcursorImage *image = 0;
if (!file)
return NULL;
if (theme)
f = XcursorScanTheme (theme, file);
if (!f)
@ -279,6 +295,9 @@ XcursorLibraryLoadImages (const char *file, const char *theme, int size)
FILE *f = 0;
XcursorImages *images = 0;
if (!file)
return NULL;
if (theme)
f = XcursorScanTheme (theme, file);
if (!f)
@ -303,6 +322,9 @@ XcursorLibraryLoadCursor (Display *dpy, const char *file)
XcursorImages *images = XcursorLibraryLoadImages (file, theme, size);
Cursor cursor;
if (!file)
return 0;
if (!images)
{
int id = XcursorLibraryShape (file);
@ -328,6 +350,9 @@ XcursorLibraryLoadCursors (Display *dpy, const char *file)
XcursorImages *images = XcursorLibraryLoadImages (file, theme, size);
XcursorCursors *cursors;
if (!file)
return NULL;
if (!images)
{
int id = XcursorLibraryShape (file);

View file

@ -1,4 +1,5 @@
/*
* $Id$
*
* Copyright © 2002 Keith Packard
*

View file

@ -1,4 +1,5 @@
/*
* $Id$
*
* Copyright © 2002 Keith Packard
*
@ -36,6 +37,9 @@ _XcursorFontIsCursor (Display *dpy, Font font)
int n;
Atom cursor;
if (!dpy || !font)
return XcursorFalse;
if (font == dpy->cursor_font)
return XcursorTrue;
@ -86,6 +90,9 @@ XcursorTryShapeCursor (Display *dpy,
XColor _Xconst *background)
{
Cursor cursor = None;
if (!dpy || !source_font || !mask_font || !foreground || !background)
return 0;
if (!XcursorSupportsARGB (dpy) && !XcursorGetThemeCore (dpy))
return None;
@ -120,6 +127,9 @@ XcursorNoticeCreateBitmap (Display *dpy,
int replace = 0;
XcursorBitmapInfo *bmi;
if (!dpy)
return;
if (!XcursorSupportsARGB (dpy) && !XcursorGetThemeCore (dpy))
return;
@ -160,9 +170,14 @@ XcursorNoticeCreateBitmap (Display *dpy,
static XcursorBitmapInfo *
_XcursorGetBitmap (Display *dpy, Pixmap bitmap)
{
XcursorDisplayInfo *info = _XcursorGetDisplayInfo (dpy);
XcursorDisplayInfo *info;
int i;
if (!dpy || !bitmap)
return NULL;
info = _XcursorGetDisplayInfo (dpy);
if (!info)
return 0;
LockDisplay (dpy);
@ -233,6 +248,9 @@ XcursorImageHash (XImage *image,
int low_addr;
Bool bit_swap;
if (!image)
return;
for (i = 0; i < XCURSOR_BITMAP_HASH_SIZE; i++)
hash[i] = 0;
/*
@ -302,6 +320,9 @@ XcursorNoticePutBitmap (Display *dpy,
XImage *image)
{
XcursorBitmapInfo *bmi;
if (!dpy || !image)
return;
if (!XcursorSupportsARGB (dpy) && !XcursorGetThemeCore (dpy))
return;
@ -383,6 +404,9 @@ XcursorTryShapeBitmapCursor (Display *dpy,
int i;
Cursor cursor;
if (!dpy || !foreground || !background)
return 0;
if (!XcursorSupportsARGB (dpy) && !XcursorGetThemeCore (dpy))
return None;