|
|
1.1 root 1: /************************************************************
2: Copyright 1987 by Sun Microsystems, Inc. Mountain View, CA.
3:
4: All Rights Reserved
5:
6: Permission to use, copy, modify, and distribute this
7: software and its documentation for any purpose and without
8: fee is hereby granted, provided that the above copyright no-
9: tice appear in all copies and that both that copyright no-
10: tice and this permission notice appear in supporting docu-
11: mentation, and that the names of Sun or MIT not be used in
12: advertising or publicity pertaining to distribution of the
13: software without specific prior written permission. Sun and
14: M.I.T. make no representations about the suitability of this
15: software for any purpose. It is provided "as is" without any
16: express or implied warranty.
17:
18: SUN DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
19: INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FIT-
20: NESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SUN BE LI-
21: ABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
22: ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
23: PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
24: OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH
25: THE USE OR PERFORMANCE OF THIS SOFTWARE.
26:
27: ********************************************************/
28:
29: #include "pixmap.h"
30: #include "region.h"
31: #include "gc.h"
32: #include "colormap.h"
33: #include "miscstruct.h"
34:
35: extern Bool cfbScreenInit();
36: extern void cfbQueryBestSize();
37: extern Bool cfbCreateWindow();
38: extern Bool cfbPositionWindow();
39: extern Bool cfbChangeWindowAttributes();
40: extern Bool cfbMapWindow();
41: extern Bool cfbUnmapWindow();
42: extern Bool cfbDestroyWindow();
43:
44: extern Bool cfbRealizeFont();
45: extern Bool cfbUnrealizeFont();
46: extern Bool cfbRealizeCursor();
47: extern Bool cfbUnrealizeCursor();
48: extern Bool cfbScreenSaver();
49: extern Bool cfbCreateGC();
50:
51: extern PixmapPtr cfbCreatePixmap();
52: extern Bool cfbDestroyPixmap();
53:
54: extern void cfbCopyWindow();
55: extern void cfbPaintWindowBorder();
56: extern void cfbPaintWindowBackground();
57: extern void cfbPaintAreaNone();
58: extern void cfbPaintAreaPR();
59: extern void cfbPaintAreaSolid();
60: extern void cfbPaintArea32();
61: extern void cfbPaintAreaOther();
62:
63: extern void miPolyFillRect();
64: extern void miPolyFillArc();
65:
66: extern void cfbDestroyGC();
67: extern void cfbValidateGC();
68: extern void cfbDestroyClip();
69: extern void cfbCopyClip();
70: extern void cfbChangeClip();
71: extern void cfbCopyGCDest();
72:
73: extern void cfbSetSpans();
74: extern unsigned int *cfbGetSpans();
75: extern void cfbSolidFS();
76: extern void cfbUnnaturalTileFS();
77: extern void cfbUnnaturalStippleFS();
78:
79: /* included from mfb.h; we can't include mfb.h directly because of other
80: * conflicts */
81: extern void mfbSetSpans();
82: extern unsigned int *mfbGetSpans();
83: extern void mfbUnnaturalTileFS();
84: extern void mfbUnnaturalStippleFS();
85: extern Bool mfbRealizeFont();
86: extern Bool mfbUnrealizeFont();
87: extern RegionPtr mfbPixmapToRegion();
88:
89: extern void miNotMiter();
90: extern void miMiter();
91: extern PixmapPtr cfbCopyPixmap();
92: extern void cfbConvertRects();
93: extern void miPolyArc();
94: extern void miFillPolyArc();
95:
96: extern void miPutImage();
97: extern void miGetImage();
98: extern void miCopyArea();
99: extern void miCopyPlane();
100: extern void miPolyPoint();
101: extern void miPushPixels();
102:
103: extern int cfbListInstalledColormaps();
104:
105: extern ColormapPtr cfbGetStaticColormap();
106: #ifdef STATIC_COLOR
107: extern void cfbResolveStaticColor();
108: #endif
109:
110: /*
111: private filed of pixmap
112: pixmap.devPrivate = (unsigned int *)pointer_to_bits
113: pixmap.devKind = width_of_pixmap_in_bytes
114: */
115:
116: /* private field of GC */
117: typedef struct {
118: short rop; /* reduction of rasterop to 1 of 3 */
119: short ropOpStip; /* rop for opaque stipple */
120: short fExpose; /* callexposure handling ? */
121: short freeCompClip;
122: PixmapPtr pRotatedTile; /* tile/stipple rotated to align with window */
123: PixmapPtr pRotatedStipple; /* and using offsets */
124: RegionPtr pAbsClientRegion; /* client region in screen coords */
125: RegionPtr pCompositeClip; /* FREE_CC or REPLACE_CC */
126: } cfbPrivGC;
127: typedef cfbPrivGC *cfbPrivGCPtr;
128:
129: /* freeCompositeClip values */
130: #define REPLACE_CC 0 /* compsite clip is a copy of a
131: pointer, so it doesn't need to
132: be freed; just overwrite it.
133: this happens if there is no
134: client clip and the gc is
135: clipped by children
136: */
137: #define FREE_CC 1 /* composite clip is a real
138: region that we need to free
139: */
140:
141: /* private field of window */
142: typedef struct {
143: int fastBorder; /* non-zero if border is 32 bits wide */
144: int fastBackground;
145: DDXPointRec oldRotate;
146: PixmapPtr pRotatedBackground;
147: PixmapPtr pRotatedBorder;
148: } cfbPrivWin;
149:
150: /* precomputed information about each glyph for GlyphBlt code.
151: this saves recalculating the per glyph information for each
152: box.
153: */
154: typedef struct _pos{
155: int xpos; /* xposition of glyph's origin */
156: int xchar; /* x position mod 32 */
157: int leftEdge;
158: int rightEdge;
159: int topEdge;
160: int bottomEdge;
161: int *pdstBase; /* longword with character origin */
162: int widthGlyph; /* width in bytes of this glyph */
163: } TEXTPOS;
164:
165: /* reduced raster ops for cfb */
166: #define RROP_BLACK GXclear
167: #define RROP_WHITE GXset
168: #define RROP_NOP GXnoop
169: #define RROP_INVERT GXinvert
170:
171: /* out of clip region codes */
172: #define OUT_LEFT 0x08
173: #define OUT_RIGHT 0x04
174: #define OUT_ABOVE 0x02
175: #define OUT_BELOW 0x01
176:
177: /* major axis for bresenham's line */
178: #define X_AXIS 0
179: #define Y_AXIS 1
180:
181: /* optimization codes for FONT's devPrivate field */
182: #define FT_VARPITCH 0
183: #define FT_SMALLPITCH 1
184: #define FT_FIXPITCH 2
185:
186: /* macros for cfbbitblt.c, cfbfillsp.c
187: these let the code do one switch on the rop per call, rather
188: than a switch on the rop per item (span or rectangle.)
189: */
190:
191: #define fnCLEAR(src, dst) (0)
192: #define fnAND(src, dst) (src & dst)
193: #define fnANDREVERSE(src, dst) (src & ~dst)
194: #define fnCOPY(src, dst) (src)
195: #define fnANDINVERTED(src, dst) (~src & dst)
196: #define fnNOOP(src, dst) (dst)
197: #define fnXOR(src, dst) (src ^ dst)
198: #define fnOR(src, dst) (src | dst)
199: #define fnNOR(src, dst) (~(src | dst))
200: #define fnEQUIV(src, dst) (~src ^ dst)
201: #define fnINVERT(src, dst) (~dst)
202: #define fnORREVERSE(src, dst) (src | ~dst)
203: #define fnCOPYINVERTED(src, dst)(~src)
204: #define fnORINVERTED(src, dst) (~src | dst)
205: #define fnNAND(src, dst) (~(src & dst))
206: #define fnSET(src, dst) (~0)
207:
208: /* Binary search to figure out what to do for the raster op. It may
209: * do 5 comparisons, but at least it does no function calls
210: * Special cases copy because it's so frequent
211: * XXX - can't use this in many cases because it has no plane mask.
212: */
213: #define DoRop(alu, src, dst) \
214: ( ((alu) == GXcopy) ? (src) : \
215: (((alu) >= GXnor) ? \
216: (((alu) >= GXcopyInverted) ? \
217: (((alu) >= GXnand) ? \
218: (((alu) == GXnand) ? ~((src) & (dst)) : ~0) : \
219: (((alu) == GXcopyInverted) ? ~(src) : (~(src) | (dst)))) : \
220: (((alu) >= GXinvert) ? \
221: (((alu) == GXinvert) ? ~(dst) : ((src) | ~(dst))) : \
222: (((alu) == GXnor) ? ~((src) | (dst)) : (~(src) ^ (dst)))) ) : \
223: (((alu) >= GXandInverted) ? \
224: (((alu) >= GXxor) ? \
225: (((alu) == GXxor) ? ((src) ^ (dst)) : ((src) | (dst))) : \
226: (((alu) == GXnoop) ? (dst) : (~(src) & (dst)))) : \
227: (((alu) >= GXandReverse) ? \
228: (((alu) == GXandReverse) ? ((src) & ~(dst)) : (src)) : \
229: (((alu) == GXand) ? ((src) & (dst)) : 0))) ) )
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.