aboutsummaryrefslogtreecommitdiffstats
path: root/src/c_screen.c
diff options
context:
space:
mode:
authorjoe <rbo@gmx.us>2025-09-24 22:22:14 +0200
committerjoe <rbo@gmx.us>2025-09-24 22:22:14 +0200
commit9b77994475ff504d89a044e398e07ea043d88c52 (patch)
tree1110b920feaafa62799de8e0dde431b6f5352739 /src/c_screen.c
parentok (diff)
downloadhalfcab-9b77994475ff504d89a044e398e07ea043d88c52.tar.gz
halfcab-9b77994475ff504d89a044e398e07ea043d88c52.tar.bz2
halfcab-9b77994475ff504d89a044e398e07ea043d88c52.tar.xz
halfcab-9b77994475ff504d89a044e398e07ea043d88c52.tar.zst
halfcab-9b77994475ff504d89a044e398e07ea043d88c52.zip
good progress
Diffstat (limited to 'src/c_screen.c')
-rw-r--r--src/c_screen.c112
1 files changed, 112 insertions, 0 deletions
diff --git a/src/c_screen.c b/src/c_screen.c
new file mode 100644
index 0000000..5a67f9b
--- /dev/null
+++ b/src/c_screen.c
@@ -0,0 +1,112 @@
+/*
+ * =====================
+ * ==== ===============
+ * =====================
+ * === === ==== ==
+ * ==== == == = =
+ * ==== == = == =
+ * ==== == = == ====
+ * ==== == = == = =
+ * = = === ==== ==
+ * == ================
+ * =====================
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ *
+ * Copyright (c) 2025, joe
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ *
+ * 3. Neither the name of the organization nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ''AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * halfcab: src/c_screen.c
+ * Wed, 24 Sep 2025 20:29:26 +0200
+ * joe <rbo@gmx.us>
+ */
+
+#include <X11/X.h>
+#include <X11/Xlib.h>
+#include <X11/Xutil.h>
+
+#include "c_defines.h"
+#include "c_screen.h"
+
+static void
+fill_led
+(unsigned char leds[],
+ const int i,
+ Display* disp,
+ XImage* img,
+ const int min_x,
+ const int max_x,
+ const int min_y,
+ const int max_y)
+{
+ XColor c;
+
+ (void)min_x;
+ (void)max_x;
+ (void)min_y;
+ (void)max_y;
+ c.pixel = XGetPixel(img, 0, 0);
+ XQueryColor(disp, DefaultColormap(disp, DefaultScreen(disp)), &c);
+ leds[i + 0] = c.red;
+ leds[i + 1] = c.green;
+ leds[i + 2] = c.blue;
+}
+
+void
+c_get_screen_colors
+(unsigned char leds[],
+ Display* disp)
+{
+ XImage* img;
+ const int top_leds = NUM_LEDS / 2;
+ const int side_leds = NUM_LEDS / 4;
+ const int top_px_per_led = SCREEN_W / top_leds;
+ const int side_px_per_led = SCREEN_H / side_leds;
+ int i;
+
+ img = XGetImage(
+ disp, RootWindow(disp, DefaultScreen(disp)),
+ 1920, 0,
+ SCREEN_W, SCREEN_H,
+ AllPlanes, ZPixmap
+ );
+ if (img == NULL) {
+ return;
+ }
+ i = 0;
+ fill_led(
+ leds, i,
+ disp, img,
+ 0, side_px_per_led,
+ VERT_PIXEL_GAP + (0 * side_px_per_led),
+ VERT_PIXEL_GAP + ((0 + 1) * side_px_per_led)
+ );
+ (void)top_px_per_led;
+ XDestroyImage(img);
+}