aboutsummaryrefslogtreecommitdiff
path: root/xorg-server/glamor/glamor_utils.c
diff options
context:
space:
mode:
Diffstat (limited to 'xorg-server/glamor/glamor_utils.c')
-rw-r--r--xorg-server/glamor/glamor_utils.c79
1 files changed, 79 insertions, 0 deletions
diff --git a/xorg-server/glamor/glamor_utils.c b/xorg-server/glamor/glamor_utils.c
new file mode 100644
index 000000000..f06896096
--- /dev/null
+++ b/xorg-server/glamor/glamor_utils.c
@@ -0,0 +1,79 @@
+/*
+ * Copyright © 2014 Keith Packard
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that copyright
+ * notice and this permission notice appear in supporting documentation, and
+ * that the name of the copyright holders not be used in advertising or
+ * publicity pertaining to distribution of the software without specific,
+ * written prior permission. The copyright holders make no representations
+ * about the suitability of this software for any purpose. It is provided "as
+ * is" without express or implied warranty.
+ *
+ * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+ * OF THIS SOFTWARE.
+ */
+
+#include "glamor_priv.h"
+
+void
+glamor_solid_boxes(PixmapPtr pixmap,
+ BoxPtr box, int nbox, unsigned long fg_pixel)
+{
+ DrawablePtr drawable = &pixmap->drawable;
+ GCPtr gc;
+ xRectangle *rect;
+ int n;
+
+ rect = malloc(nbox * sizeof (xRectangle));
+ if (!rect)
+ return;
+ for (n = 0; n < nbox; n++) {
+ rect[n].x = box[n].x1;
+ rect[n].y = box[n].y1;
+ rect[n].width = box[n].x2 - box[n].x1;
+ rect[n].height = box[n].y2 - box[n].y1;
+ }
+
+ gc = GetScratchGC(drawable->depth, drawable->pScreen);
+ if (gc) {
+ ChangeGCVal vals[1];
+
+ vals[0].val = fg_pixel;
+ ChangeGC(NullClient, gc, GCForeground, vals);
+ ValidateGC(drawable, gc);
+ gc->ops->PolyFillRect(drawable, gc, nbox, rect);
+ FreeScratchGC(gc);
+ }
+ free(rect);
+}
+
+void
+glamor_solid(PixmapPtr pixmap, int x, int y, int width, int height,
+ unsigned long fg_pixel)
+{
+ DrawablePtr drawable = &pixmap->drawable;
+ GCPtr gc;
+ ChangeGCVal vals[1];
+ xRectangle rect;
+
+ vals[0].val = fg_pixel;
+ gc = GetScratchGC(drawable->depth, drawable->pScreen);
+ if (!gc)
+ return;
+ ChangeGC(NullClient, gc, GCForeground, vals);
+ ValidateGC(drawable, gc);
+ rect.x = x;
+ rect.y = y;
+ rect.width = width;
+ rect.height = height;
+ gc->ops->PolyFillRect(drawable, gc, 1, &rect);
+ FreeScratchGC(gc);
+}
+