summaryrefslogtreecommitdiff
path: root/dix/cursor.c
diff options
context:
space:
mode:
Diffstat (limited to 'dix/cursor.c')
-rw-r--r--dix/cursor.c394
1 files changed, 181 insertions, 213 deletions
diff --git a/dix/cursor.c b/dix/cursor.c
index 6bff44723..1ee127ac5 100644
--- a/dix/cursor.c
+++ b/dix/cursor.c
@@ -22,7 +22,6 @@ Except as contained in this notice, the name of The Open Group shall not be
used in advertising or otherwise to promote the sale, use or other dealings
in this Software without prior written authorization from The Open Group.
-
Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts.
All Rights Reserved
@@ -45,8 +44,6 @@ SOFTWARE.
******************************************************************/
-
-
#ifdef HAVE_DIX_CONFIG_H
#include <dix-config.h>
#endif
@@ -70,40 +67,36 @@ typedef struct _GlyphShare {
struct _GlyphShare *next;
} GlyphShare, *GlyphSharePtr;
-static GlyphSharePtr sharedGlyphs = (GlyphSharePtr)NULL;
+static GlyphSharePtr sharedGlyphs = (GlyphSharePtr) NULL;
DevScreenPrivateKeyRec cursorScreenDevPriv;
#ifdef XFIXES
-static CARD32 cursorSerial;
+static CARD32 cursorSerial;
#endif
static void
FreeCursorBits(CursorBitsPtr bits)
{
if (--bits->refcnt > 0)
- return;
+ return;
free(bits->source);
free(bits->mask);
#ifdef ARGB_CURSOR
free(bits->argb);
#endif
dixFiniPrivates(bits, PRIVATE_CURSOR_BITS);
- if (bits->refcnt == 0)
- {
- GlyphSharePtr *prev, this;
-
- for (prev = &sharedGlyphs;
- (this = *prev) && (this->bits != bits);
- prev = &this->next)
- ;
- if (this)
- {
- *prev = this->next;
- CloseFont(this->font, (Font)0);
- free(this);
- }
- free(bits);
+ if (bits->refcnt == 0) {
+ GlyphSharePtr *prev, this;
+
+ for (prev = &sharedGlyphs;
+ (this = *prev) && (this->bits != bits); prev = &this->next);
+ if (this) {
+ *prev = this->next;
+ CloseFont(this->font, (Font) 0);
+ free(this);
+ }
+ free(bits);
}
}
@@ -115,27 +108,25 @@ FreeCursorBits(CursorBitsPtr bits)
int
FreeCursor(pointer value, XID cid)
{
- int nscr;
- CursorPtr pCurs = (CursorPtr)value;
+ int nscr;
+ CursorPtr pCurs = (CursorPtr) value;
- ScreenPtr pscr;
- DeviceIntPtr pDev = NULL; /* unused anyway */
+ ScreenPtr pscr;
+ DeviceIntPtr pDev = NULL; /* unused anyway */
- if ( --pCurs->refcnt != 0)
- return Success;
+ if (--pCurs->refcnt != 0)
+ return Success;
- for (nscr = 0; nscr < screenInfo.numScreens; nscr++)
- {
- pscr = screenInfo.screens[nscr];
- (void)( *pscr->UnrealizeCursor)(pDev, pscr, pCurs);
+ for (nscr = 0; nscr < screenInfo.numScreens; nscr++) {
+ pscr = screenInfo.screens[nscr];
+ (void) (*pscr->UnrealizeCursor) (pDev, pscr, pCurs);
}
FreeCursorBits(pCurs->bits);
dixFiniPrivates(pCurs, PRIVATE_CURSOR);
- free( pCurs);
+ free(pCurs);
return Success;
}
-
/*
* We check for empty cursors so that we won't have to display them
*/
@@ -146,15 +137,17 @@ CheckForEmptyMask(CursorBitsPtr bits)
int n = BitmapBytePad(bits->width) * bits->height;
bits->emptyMask = FALSE;
- while(n--)
- if(*(msk++) != 0) return;
+ while (n--)
+ if (*(msk++) != 0)
+ return;
#ifdef ARGB_CURSOR
- if (bits->argb)
- {
- CARD32 *argb = bits->argb;
- n = bits->width * bits->height;
- while (n--)
- if (*argb++ & 0xff000000) return;
+ if (bits->argb) {
+ CARD32 *argb = bits->argb;
+
+ n = bits->width * bits->height;
+ while (n--)
+ if (*argb++ & 0xff000000)
+ return;
}
#endif
bits->emptyMask = TRUE;
@@ -171,43 +164,37 @@ static int
RealizeCursorAllScreens(CursorPtr pCurs)
{
DeviceIntPtr pDev;
- ScreenPtr pscr;
+ ScreenPtr pscr;
int nscr;
- for (nscr = 0; nscr < screenInfo.numScreens; nscr++)
- {
+ for (nscr = 0; nscr < screenInfo.numScreens; nscr++) {
pscr = screenInfo.screens[nscr];
- for (pDev = inputInfo.devices; pDev; pDev = pDev->next)
- {
- if (DevHasCursor(pDev))
- {
- if (!( *pscr->RealizeCursor)(pDev, pscr, pCurs))
- {
+ for (pDev = inputInfo.devices; pDev; pDev = pDev->next) {
+ if (DevHasCursor(pDev)) {
+ if (!(*pscr->RealizeCursor) (pDev, pscr, pCurs)) {
/* Realize failed for device pDev on screen pscr.
* We have to assume that for all devices before, realize
* worked. We need to rollback all devices so far on the
* current screen and then all devices on previous
* screens.
*/
- DeviceIntPtr pDevIt = inputInfo.devices; /*dev iterator*/
- while(pDevIt && pDevIt != pDev)
- {
+ DeviceIntPtr pDevIt = inputInfo.devices; /*dev iterator */
+
+ while (pDevIt && pDevIt != pDev) {
if (DevHasCursor(pDevIt))
- ( *pscr->UnrealizeCursor)(pDevIt, pscr, pCurs);
+ (*pscr->UnrealizeCursor) (pDevIt, pscr, pCurs);
pDevIt = pDevIt->next;
}
- while (--nscr >= 0)
- {
+ while (--nscr >= 0) {
pscr = screenInfo.screens[nscr];
/* now unrealize all devices on previous screens */
pDevIt = inputInfo.devices;
- while (pDevIt)
- {
+ while (pDevIt) {
if (DevHasCursor(pDevIt))
- ( *pscr->UnrealizeCursor)(pDevIt, pscr, pCurs);
+ (*pscr->UnrealizeCursor) (pDevIt, pscr, pCurs);
pDevIt = pDevIt->next;
}
- ( *pscr->UnrealizeCursor)(pDev, pscr, pCurs);
+ (*pscr->UnrealizeCursor) (pDev, pscr, pCurs);
}
return BadAlloc;
}
@@ -218,7 +205,6 @@ RealizeCursorAllScreens(CursorPtr pCurs)
return Success;
}
-
/**
* does nothing about the resource table, just creates the data structure.
* does not copy the src and mask bits
@@ -229,24 +215,24 @@ RealizeCursorAllScreens(CursorPtr pCurs)
*/
int
AllocARGBCursor(unsigned char *psrcbits, unsigned char *pmaskbits,
- CARD32 *argb, CursorMetricPtr cm,
- unsigned foreRed, unsigned foreGreen, unsigned foreBlue,
- unsigned backRed, unsigned backGreen, unsigned backBlue,
- CursorPtr *ppCurs, ClientPtr client, XID cid)
+ CARD32 *argb, CursorMetricPtr cm,
+ unsigned foreRed, unsigned foreGreen, unsigned foreBlue,
+ unsigned backRed, unsigned backGreen, unsigned backBlue,
+ CursorPtr *ppCurs, ClientPtr client, XID cid)
{
- CursorBitsPtr bits;
- CursorPtr pCurs;
+ CursorBitsPtr bits;
+ CursorPtr pCurs;
int rc;
*ppCurs = NULL;
- pCurs = (CursorPtr)calloc(CURSOR_REC_SIZE + CURSOR_BITS_SIZE, 1);
+ pCurs = (CursorPtr) calloc(CURSOR_REC_SIZE + CURSOR_BITS_SIZE, 1);
if (!pCurs)
- return BadAlloc;
+ return BadAlloc;
- bits = (CursorBitsPtr)((char *)pCurs + CURSOR_REC_SIZE);
+ bits = (CursorBitsPtr) ((char *) pCurs + CURSOR_REC_SIZE);
dixInitPrivates(pCurs, pCurs + 1, PRIVATE_CURSOR);
dixInitPrivates(bits, bits + 1, PRIVATE_CURSOR_BITS)
- bits->source = psrcbits;
+ bits->source = psrcbits;
bits->mask = pmaskbits;
#ifdef ARGB_CURSOR
bits->argb = argb;
@@ -255,7 +241,7 @@ AllocARGBCursor(unsigned char *psrcbits, unsigned char *pmaskbits,
bits->height = cm->height;
bits->xhot = cm->xhot;
bits->yhot = cm->yhot;
- pCurs->refcnt = 1;
+ pCurs->refcnt = 1;
bits->refcnt = -1;
CheckForEmptyMask(bits);
pCurs->bits = bits;
@@ -276,7 +262,7 @@ AllocARGBCursor(unsigned char *psrcbits, unsigned char *pmaskbits,
/* security creation/labeling check */
rc = XaceHook(XACE_RESOURCE_ACCESS, client, cid, RT_CURSOR,
- pCurs, RT_NONE, NULL, DixCreateAccess);
+ pCurs, RT_NONE, NULL, DixCreateAccess);
if (rc != Success)
goto error;
@@ -287,7 +273,7 @@ AllocARGBCursor(unsigned char *psrcbits, unsigned char *pmaskbits,
*ppCurs = pCurs;
return Success;
-error:
+ error:
FreeCursorBits(bits);
dixFiniPrivates(pCurs, PRIVATE_CURSOR);
free(pCurs);
@@ -297,142 +283,124 @@ error:
int
AllocGlyphCursor(Font source, unsigned sourceChar, Font mask, unsigned maskChar,
- unsigned foreRed, unsigned foreGreen, unsigned foreBlue,
- unsigned backRed, unsigned backGreen, unsigned backBlue,
- CursorPtr *ppCurs, ClientPtr client, XID cid)
+ unsigned foreRed, unsigned foreGreen, unsigned foreBlue,
+ unsigned backRed, unsigned backGreen, unsigned backBlue,
+ CursorPtr *ppCurs, ClientPtr client, XID cid)
{
- FontPtr sourcefont, maskfont;
- unsigned char *srcbits;
- unsigned char *mskbits;
+ FontPtr sourcefont, maskfont;
+ unsigned char *srcbits;
+ unsigned char *mskbits;
CursorMetricRec cm;
int rc;
- CursorBitsPtr bits;
- CursorPtr pCurs;
+ CursorBitsPtr bits;
+ CursorPtr pCurs;
GlyphSharePtr pShare;
- rc = dixLookupResourceByType((pointer *)&sourcefont, source, RT_FONT, client,
- DixUseAccess);
- if (rc != Success)
- {
- client->errorValue = source;
- return rc;
+ rc = dixLookupResourceByType((pointer *) &sourcefont, source, RT_FONT,
+ client, DixUseAccess);
+ if (rc != Success) {
+ client->errorValue = source;
+ return rc;
}
- rc = dixLookupResourceByType((pointer *)&maskfont, mask, RT_FONT, client,
- DixUseAccess);
- if (rc != Success && mask != None)
- {
- client->errorValue = mask;
- return rc;
+ rc = dixLookupResourceByType((pointer *) &maskfont, mask, RT_FONT, client,
+ DixUseAccess);
+ if (rc != Success && mask != None) {
+ client->errorValue = mask;
+ return rc;
}
if (sourcefont != maskfont)
- pShare = (GlyphSharePtr)NULL;
- else
- {
- for (pShare = sharedGlyphs;
- pShare &&
- ((pShare->font != sourcefont) ||
- (pShare->sourceChar != sourceChar) ||
- (pShare->maskChar != maskChar));
- pShare = pShare->next)
- ;
+ pShare = (GlyphSharePtr) NULL;
+ else {
+ for (pShare = sharedGlyphs;
+ pShare &&
+ ((pShare->font != sourcefont) ||
+ (pShare->sourceChar != sourceChar) ||
+ (pShare->maskChar != maskChar)); pShare = pShare->next);
}
- if (pShare)
- {
- pCurs = (CursorPtr)calloc(CURSOR_REC_SIZE, 1);
- if (!pCurs)
- return BadAlloc;
- dixInitPrivates(pCurs, pCurs + 1, PRIVATE_CURSOR);
- bits = pShare->bits;
- bits->refcnt++;
+ if (pShare) {
+ pCurs = (CursorPtr) calloc(CURSOR_REC_SIZE, 1);
+ if (!pCurs)
+ return BadAlloc;
+ dixInitPrivates(pCurs, pCurs + 1, PRIVATE_CURSOR);
+ bits = pShare->bits;
+ bits->refcnt++;
}
- else
- {
- if (!CursorMetricsFromGlyph(sourcefont, sourceChar, &cm))
- {
- client->errorValue = sourceChar;
- return BadValue;
- }
- if (!maskfont)
- {
- long n;
- unsigned char *mskptr;
-
- n = BitmapBytePad(cm.width)*(long)cm.height;
- mskptr = mskbits = malloc(n);
- if (!mskptr)
- return BadAlloc;
- while (--n >= 0)
- *mskptr++ = ~0;
- }
- else
- {
- if (!CursorMetricsFromGlyph(maskfont, maskChar, &cm))
- {
- client->errorValue = maskChar;
- return BadValue;
- }
- if ((rc = ServerBitsFromGlyph(maskfont, maskChar, &cm, &mskbits)))
- return rc;
- }
- if ((rc = ServerBitsFromGlyph(sourcefont, sourceChar, &cm, &srcbits)))
- {
- free(mskbits);
- return rc;
- }
- if (sourcefont != maskfont)
- {
- pCurs =
- (CursorPtr)calloc(CURSOR_REC_SIZE + CURSOR_BITS_SIZE, 1);
- if (pCurs)
- bits = (CursorBitsPtr)((char *)pCurs + CURSOR_REC_SIZE);
- else
- bits = (CursorBitsPtr)NULL;
- }
- else
- {
- pCurs = (CursorPtr)calloc(CURSOR_REC_SIZE, 1);
- if (pCurs)
- bits = (CursorBitsPtr)calloc(CURSOR_BITS_SIZE, 1);
- else
- bits = (CursorBitsPtr)NULL;
- }
- if (!bits)
- {
- free(pCurs);
- free(mskbits);
- free(srcbits);
- return BadAlloc;
- }
- dixInitPrivates(pCurs, pCurs + 1, PRIVATE_CURSOR);
- dixInitPrivates(bits, bits + 1, PRIVATE_CURSOR_BITS);
- bits->source = srcbits;
- bits->mask = mskbits;
+ else {
+ if (!CursorMetricsFromGlyph(sourcefont, sourceChar, &cm)) {
+ client->errorValue = sourceChar;
+ return BadValue;
+ }
+ if (!maskfont) {
+ long n;
+ unsigned char *mskptr;
+
+ n = BitmapBytePad(cm.width) * (long) cm.height;
+ mskptr = mskbits = malloc(n);
+ if (!mskptr)
+ return BadAlloc;
+ while (--n >= 0)
+ *mskptr++ = ~0;
+ }
+ else {
+ if (!CursorMetricsFromGlyph(maskfont, maskChar, &cm)) {
+ client->errorValue = maskChar;
+ return BadValue;
+ }
+ if ((rc = ServerBitsFromGlyph(maskfont, maskChar, &cm, &mskbits)))
+ return rc;
+ }
+ if ((rc = ServerBitsFromGlyph(sourcefont, sourceChar, &cm, &srcbits))) {
+ free(mskbits);
+ return rc;
+ }
+ if (sourcefont != maskfont) {
+ pCurs = (CursorPtr) calloc(CURSOR_REC_SIZE + CURSOR_BITS_SIZE, 1);
+ if (pCurs)
+ bits = (CursorBitsPtr) ((char *) pCurs + CURSOR_REC_SIZE);
+ else
+ bits = (CursorBitsPtr) NULL;
+ }
+ else {
+ pCurs = (CursorPtr) calloc(CURSOR_REC_SIZE, 1);
+ if (pCurs)
+ bits = (CursorBitsPtr) calloc(CURSOR_BITS_SIZE, 1);
+ else
+ bits = (CursorBitsPtr) NULL;
+ }
+ if (!bits) {
+ free(pCurs);
+ free(mskbits);
+ free(srcbits);
+ return BadAlloc;
+ }
+ dixInitPrivates(pCurs, pCurs + 1, PRIVATE_CURSOR);
+ dixInitPrivates(bits, bits + 1, PRIVATE_CURSOR_BITS);
+ bits->source = srcbits;
+ bits->mask = mskbits;
#ifdef ARGB_CURSOR
- bits->argb = 0;
+ bits->argb = 0;
#endif
- bits->width = cm.width;
- bits->height = cm.height;
- bits->xhot = cm.xhot;
- bits->yhot = cm.yhot;
- if (sourcefont != maskfont)
- bits->refcnt = -1;
- else
- {
- bits->refcnt = 1;
- pShare = malloc(sizeof(GlyphShare));
- if (!pShare)
- {
- FreeCursorBits(bits);
- return BadAlloc;
- }
- pShare->font = sourcefont;
- sourcefont->refcnt++;
- pShare->sourceChar = sourceChar;
- pShare->maskChar = maskChar;
- pShare->bits = bits;
- pShare->next = sharedGlyphs;
- sharedGlyphs = pShare;
- }
+ bits->width = cm.width;
+ bits->height = cm.height;
+ bits->xhot = cm.xhot;
+ bits->yhot = cm.yhot;
+ if (sourcefont != maskfont)
+ bits->refcnt = -1;
+ else {
+ bits->refcnt = 1;
+ pShare = malloc(sizeof(GlyphShare));
+ if (!pShare) {
+ FreeCursorBits(bits);
+ return BadAlloc;
+ }
+ pShare->font = sourcefont;
+ sourcefont->refcnt++;
+ pShare->sourceChar = sourceChar;
+ pShare->maskChar = maskChar;
+ pShare->bits = bits;
+ pShare->next = sharedGlyphs;
+ sharedGlyphs = pShare;
+ }
}
CheckForEmptyMask(bits);
@@ -455,7 +423,7 @@ AllocGlyphCursor(Font source, unsigned sourceChar, Font mask, unsigned maskChar,
/* security creation/labeling check */
rc = XaceHook(XACE_RESOURCE_ACCESS, client, cid, RT_CURSOR,
- pCurs, RT_NONE, NULL, DixCreateAccess);
+ pCurs, RT_NONE, NULL, DixCreateAccess);
if (rc != Success)
goto error;
@@ -466,7 +434,7 @@ AllocGlyphCursor(Font source, unsigned sourceChar, Font mask, unsigned maskChar,
*ppCurs = pCurs;
return Success;
-error:
+ error:
FreeCursorBits(bits);
dixFiniPrivates(pCurs, PRIVATE_CURSOR);
free(pCurs);
@@ -486,27 +454,27 @@ error:
CursorPtr
CreateRootCursor(char *unused1, unsigned int unused2)
{
- CursorPtr curs;
- FontPtr cursorfont;
- int err;
- XID fontID;
+ CursorPtr curs;
+ FontPtr cursorfont;
+ int err;
+ XID fontID;
fontID = FakeClientID(0);
err = OpenFont(serverClient, fontID, FontLoadAll | FontOpenSync,
- (unsigned)strlen(defaultCursorFont), defaultCursorFont);
+ (unsigned) strlen(defaultCursorFont), defaultCursorFont);
if (err != Success)
- return NullCursor;
+ return NullCursor;
- err = dixLookupResourceByType((pointer *)&cursorfont, fontID, RT_FONT,
- serverClient, DixReadAccess);
+ err = dixLookupResourceByType((pointer *) &cursorfont, fontID, RT_FONT,
+ serverClient, DixReadAccess);
if (err != Success)
- return NullCursor;
+ return NullCursor;
if (AllocGlyphCursor(fontID, 0, fontID, 1, 0, 0, 0, ~0, ~0, ~0,
- &curs, serverClient, (XID)0) != Success)
- return NullCursor;
+ &curs, serverClient, (XID) 0) != Success)
+ return NullCursor;
- if (!AddResource(FakeClientID(0), RT_CURSOR, (pointer)curs))
- return NullCursor;
+ if (!AddResource(FakeClientID(0), RT_CURSOR, (pointer) curs))
+ return NullCursor;
return curs;
}