|
|
1.1 root 1: /***********************************************************
2: Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts,
3: and the Massachusetts Institute of Technology, Cambridge, Massachusetts.
4:
5: All Rights Reserved
6:
7: Permission to use, copy, modify, and distribute this software and its
8: documentation for any purpose and without fee is hereby granted,
9: provided that the above copyright notice appear in all copies and that
10: both that copyright notice and this permission notice appear in
11: supporting documentation, and that the names of Digital or MIT not be
12: used in advertising or publicity pertaining to distribution of the
13: software without specific, written prior permission.
14:
15: DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
16: ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
17: DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
18: ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
19: WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
20: ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
21: SOFTWARE.
22:
23: ******************************************************************/
24:
25:
26: /* $Header: cursor.c,v 1.27 87/09/11 07:18:41 toddb Exp $ */
27:
28: #include "X.h"
29: #include "scrnintstr.h"
30: #include "cursorstr.h"
31: #include "dixfont.h" /* for CreateRootCursor */
32: #include "resource.h" /* for CreateRootCursor */
33:
34: #include "Xmd.h"
35: #include "dix.h" /* for CreateRootCursor */
36: #include "opaque.h" /* for CloseFont */
37:
38: /*
39: * To be called indirectly by DeleteResource; must use exactly two args
40: */
41: void
42: FreeCursor( pCurs, cid)
43: CursorPtr pCurs;
44: int cid;
45: {
46: int nscr;
47:
48: ScreenPtr pscr;
49:
50: if ( --pCurs->refcnt > 0)
51: return;
52:
53: for ( nscr=0, pscr=screenInfo.screen;
54: nscr<screenInfo.numScreens;
55: nscr++, pscr++)
56: {
57: if ( pscr->UnrealizeCursor)
58: ( *pscr->UnrealizeCursor)( pscr, pCurs);
59: }
60: Xfree( pCurs->source);
61: Xfree( pCurs->mask);
62: Xfree( pCurs);
63: }
64:
65: /*
66: * does nothing about the resource table, just creates the data structure.
67: * allocates no storage.
68: */
69: CursorPtr
70: AllocCursor( psrcbits, pmaskbits, cm,
71: foreRed, foreGreen, foreBlue, backRed, backGreen, backBlue)
72: unsigned char * psrcbits; /* server-defined padding */
73: unsigned char * pmaskbits; /* server-defined padding */
74: CursorMetricPtr cm;
75: unsigned int foreRed, foreGreen, foreBlue;
76: unsigned int backRed, backGreen, backBlue;
77: {
78: CursorPtr pCurs;
79: int nscr;
80: ScreenPtr pscr;
81:
82: pCurs = (CursorPtr )Xalloc( sizeof(CursorRec));
83:
84: pCurs->source = psrcbits;
85: pCurs->mask = pmaskbits;
86:
87: pCurs->width = cm->width;
88: pCurs->height = cm->height;
89:
90: pCurs->refcnt = 1;
91: pCurs->xhot = cm->xhot;
92: pCurs->yhot = cm->yhot;
93:
94: pCurs->foreRed = foreRed;
95: pCurs->foreGreen = foreGreen;
96: pCurs->foreBlue = foreBlue;
97:
98: pCurs->backRed = backRed;
99: pCurs->backGreen = backGreen;
100: pCurs->backBlue = backBlue;
101:
102: /*
103: * realize the cursor for every screen
104: */
105: for ( nscr=0, pscr=screenInfo.screen;
106: nscr<screenInfo.numScreens;
107: nscr++, pscr++)
108: {
109: if ( pscr->RealizeCursor)
110: ( *pscr->RealizeCursor)( pscr, pCurs);
111: }
112: return pCurs;
113: }
114:
115:
116: /***********************************************************
117: * CreateRootCursor
118: *
119: * look up the name of a font
120: * open the font
121: * add the font to the resource table
122: * make bitmaps from glyphs "glyph" and "glyph + 1" of the font
123: * make a cursor from the bitmaps
124: * add the cursor to the resource table
125: *************************************************************/
126:
127: CursorPtr
128: CreateRootCursor(pfilename, glyph)
129: char * pfilename;
130: int glyph;
131: {
132: CursorPtr curs;
133: FontPtr cursorfont;
134: char * psrcbits;
135: char * pmskbits;
136: CursorMetricRec cm;
137: XID fontID;
138:
139: fontID = FakeClientID(0);
140: if (cursorfont = OpenFont( strlen( pfilename), pfilename))
141: AddResource(
142: fontID, RT_FONT, cursorfont, CloseFont, RC_CORE);
143: else
144: return NullCursor;
145:
146: if (!CursorMetricsFromGlyph(cursorfont, glyph+1, &cm))
147: return NullCursor;
148:
149: if (ServerBitsFromGlyph(fontID, cursorfont, glyph, &cm, &psrcbits))
150: return NullCursor;
151: if (ServerBitsFromGlyph(fontID, cursorfont, glyph+1, &cm, &pmskbits))
152: return NullCursor;
153:
154: curs = AllocCursor( psrcbits, pmskbits, &cm, 0, 0, 0, ~0, ~0, ~0);
155:
156: AddResource(FakeClientID(0), RT_CURSOR, curs, FreeCursor, RC_CORE);
157: return curs;
158: }
159:
160:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.