No longer leak FDs on VT switch.
[xserver.git] / glamor / glamor_utils.c
blob8f085da3f8f018cb5cda6e5d8d8cd766779a3e0c
1 /*
2 * Copyright © 2014 Keith Packard
4 * Permission to use, copy, modify, distribute, and sell this software and its
5 * documentation for any purpose is hereby granted without fee, provided that
6 * the above copyright notice appear in all copies and that both that copyright
7 * notice and this permission notice appear in supporting documentation, and
8 * that the name of the copyright holders not be used in advertising or
9 * publicity pertaining to distribution of the software without specific,
10 * written prior permission. The copyright holders make no representations
11 * about the suitability of this software for any purpose. It is provided "as
12 * is" without express or implied warranty.
14 * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
15 * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
16 * EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
17 * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
18 * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
19 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
20 * OF THIS SOFTWARE.
23 #include "glamor_priv.h"
25 void
26 glamor_solid_boxes(DrawablePtr drawable,
27 BoxPtr box, int nbox, unsigned long fg_pixel)
29 GCPtr gc;
30 xRectangle *rect;
31 int n;
33 rect = xallocarray(nbox, sizeof(xRectangle));
34 if (!rect)
35 return;
36 for (n = 0; n < nbox; n++) {
37 rect[n].x = box[n].x1;
38 rect[n].y = box[n].y1;
39 rect[n].width = box[n].x2 - box[n].x1;
40 rect[n].height = box[n].y2 - box[n].y1;
43 gc = GetScratchGC(drawable->depth, drawable->pScreen);
44 if (gc) {
45 ChangeGCVal vals[1];
47 vals[0].val = fg_pixel;
48 ChangeGC(NullClient, gc, GCForeground, vals);
49 ValidateGC(drawable, gc);
50 gc->ops->PolyFillRect(drawable, gc, nbox, rect);
51 FreeScratchGC(gc);
53 free(rect);
56 void
57 glamor_solid(PixmapPtr pixmap, int x, int y, int width, int height,
58 unsigned long fg_pixel)
60 DrawablePtr drawable = &pixmap->drawable;
61 GCPtr gc;
62 ChangeGCVal vals[1];
63 xRectangle rect;
65 vals[0].val = fg_pixel;
66 gc = GetScratchGC(drawable->depth, drawable->pScreen);
67 if (!gc)
68 return;
69 ChangeGC(NullClient, gc, GCForeground, vals);
70 ValidateGC(drawable, gc);
71 rect.x = x;
72 rect.y = y;
73 rect.width = width;
74 rect.height = height;
75 gc->ops->PolyFillRect(drawable, gc, 1, &rect);
76 FreeScratchGC(gc);