Module Name: xsrc
Committed By: jmcneill
Date: Sat Mar 24 19:43:32 UTC 2018
Modified Files:
xsrc/local/programs/xsetwallpaper: xsetwallpaper.c
Log Message:
Support BE and 24-bpp displays.
To generate a diff of this commit:
cvs rdiff -u -r1.1 -r1.2 xsrc/local/programs/xsetwallpaper/xsetwallpaper.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: xsrc/local/programs/xsetwallpaper/xsetwallpaper.c
diff -u xsrc/local/programs/xsetwallpaper/xsetwallpaper.c:1.1 xsrc/local/programs/xsetwallpaper/xsetwallpaper.c:1.2
--- xsrc/local/programs/xsetwallpaper/xsetwallpaper.c:1.1 Sat Oct 22 22:05:27 2011
+++ xsrc/local/programs/xsetwallpaper/xsetwallpaper.c Sat Mar 24 19:43:31 2018
@@ -1,4 +1,4 @@
-/* $NetBSD: xsetwallpaper.c,v 1.1 2011/10/22 22:05:27 jmcneill Exp $ */
+/* $NetBSD: xsetwallpaper.c,v 1.2 2018/03/24 19:43:31 jmcneill Exp $ */
/*-
* Copyright (c) 2011 Jared D. McNeill <[email protected]>
@@ -26,7 +26,9 @@
*/
#include <sys/cdefs.h>
-__RCSID("$NetBSD: xsetwallpaper.c,v 1.1 2011/10/22 22:05:27 jmcneill Exp $");
+__RCSID("$NetBSD: xsetwallpaper.c,v 1.2 2018/03/24 19:43:31 jmcneill Exp $");
+
+#include <sys/endian.h>
#include <err.h>
#include <stdio.h>
@@ -57,7 +59,7 @@ main(int argc, char *argv[])
int bitmap_pad, srcx, srcy, dstx, dsty;
int imagew, imageh, imagebpp;
int ch, i;
- int screen, default_depth;
+ int screen, default_depth, byte_order;
Display *display;
Colormap colormap;
XImage *image;
@@ -96,6 +98,13 @@ main(int argc, char *argv[])
data[i + 2] = p;
}
+#if _BYTE_ORDER == _BIG_ENDIAN
+ for (i = 0; i < imagew * imageh * 4; i += 4) {
+ uint32_t *p = (uint32_t *)&data[i];
+ *p = bswap32(*p);
+ }
+#endif
+
#ifdef DEBUG
printf("%s: %dx%d %dbpp\n", argv[0], imagew, imageh, imagebpp * 8);
#endif
@@ -109,6 +118,7 @@ main(int argc, char *argv[])
screen = DefaultScreen(display);
default_depth = DefaultDepth(display, screen);
colormap = DefaultColormap(display, 0);
+ byte_order = ImageByteOrder(display);
/* get root window geometry */
if (!XGetGeometry(display, XDefaultRootWindow(display), &window,
@@ -138,13 +148,13 @@ main(int argc, char *argv[])
bitmap_pad = 16;
else
bitmap_pad = 8;
- image = XCreateImage(display, CopyFromParent, imagebpp * 8,
+ image = XCreateImage(display, CopyFromParent, default_depth,
ZPixmap, 0, (char *)data, imagew, imageh, bitmap_pad, 0);
if (image == NULL) {
errx(EXIT_FAILURE, "XCreateImage failed");
}
XInitImage(image);
- image->byte_order = LSBFirst; /* ??? */
+ image->byte_order = byte_order;
/* Create a graphics context for our new pixmap */
gc = XCreateGC(display, window, 0, NULL);