|
|
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: /* $Header: mifillrct.c,v 1.18 87/09/11 07:19:08 toddb Exp $ */
25:
26: #include "X.h"
27: #include "Xprotostr.h"
28: #include "gcstruct.h"
29: #include "windowstr.h"
30: #include "pixmap.h"
31:
32: #include "misc.h"
33:
34: /* mi rectangles
35: written by newman, with debts to all and sundry
36: */
37:
38: /* MIPOLYFILLRECT -- public entry for PolyFillRect request
39: * very straight forward: translate rectangles if necessary
40: * then call FillSpans to fill each rectangle. We let FillSpans worry about
41: * clipping to the destination
42: */
43: void
44: miPolyFillRect(pDrawable, pGC, nrectFill, prectInit)
45: DrawablePtr pDrawable;
46: GCPtr pGC;
47: int nrectFill; /* number of rectangles to fill */
48: xRectangle *prectInit; /* Pointer to first rectangle to fill */
49: {
50: int i;
51: register int height;
52: register int width;
53: register xRectangle *prect;
54: int xorg;
55: register int yorg;
56: int maxheight;
57: DDXPointPtr pptFirst;
58: register DDXPointPtr ppt;
59: int *pwFirst;
60: register int *pw;
61:
62: if ((pDrawable->type == DRAWABLE_WINDOW) && (pGC->miTranslate))
63: {
64: xorg = ((WindowPtr)pDrawable)->absCorner.x;
65: yorg = ((WindowPtr)pDrawable)->absCorner.y;
66: prect = prectInit;
67: maxheight = 0;
68: for (i = 0; i<nrectFill; i++, prect++)
69: {
70: prect->x += xorg;
71: prect->y += yorg;
72: maxheight = max(maxheight, prect->height);
73: }
74: }
75: else
76: {
77: prect = prectInit;
78: maxheight = 0;
79: for (i = 0; i<nrectFill; i++, prect++)
80: maxheight = max(maxheight, prect->height);
81: }
82:
83: pptFirst = (DDXPointPtr) ALLOCATE_LOCAL(maxheight * sizeof(DDXPointRec));
84: pwFirst = (int *) ALLOCATE_LOCAL(maxheight * sizeof(int));
85: if(!pptFirst || !pwFirst)
86: {
87: DEALLOCATE_LOCAL(pwFirst);
88: DEALLOCATE_LOCAL(pptFirst);
89: return;
90: }
91:
92: prect = prectInit;
93: while(nrectFill--)
94: {
95: ppt = pptFirst;
96: pw = pwFirst;
97: height = prect->height;
98: width = prect->width;
99: xorg = prect->x;
100: yorg = prect->y;
101: while(height--)
102: {
103: *pw++ = width;
104: ppt->x = xorg;
105: ppt->y = yorg;
106: ppt++;
107: yorg++;
108: }
109: (* pGC->FillSpans)(pDrawable, pGC,
110: prect->height, pptFirst, pwFirst,
111: 1);
112: prect++;
113: }
114: DEALLOCATE_LOCAL(pwFirst);
115: DEALLOCATE_LOCAL(pptFirst);
116: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.