From ee39e60edd3348f97abb67af7c84b459a49eb4ed Mon Sep 17 00:00:00 2001
From: Brett Weiland <techcrazybsw@gmail.com>
Date: Sun, 26 Jul 2020 12:46:01 -0500
Subject: [PATCH] 	new file:   bin/color 	modified:   src/color.c 
 new file:   src/color.h

---
 bin/color   | Bin 0 -> 17656 bytes
 src/color.c | 110 +++++++++++++++++++++++++++++++++++-----------------
 src/color.h |  24 ++++++++++++
 3 files changed, 98 insertions(+), 36 deletions(-)
 create mode 100755 bin/color
 create mode 100644 src/color.h

diff --git a/bin/color b/bin/color
new file mode 100755
index 0000000000000000000000000000000000000000..3a492ae69515c63297dc13bee77941d7107e5295
GIT binary patch
literal 17656
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
KN}GX=W&Z`T=kYKA

literal 0
HcmV?d00001

diff --git a/src/color.c b/src/color.c
index 8ff1612..565f85a 100644
--- a/src/color.c
+++ b/src/color.c
@@ -5,19 +5,59 @@
 #include <string.h>
 #include <errno.h>
 #include <math.h>
+#include <signal.h>
 
 #include "color.h"
 
 
 
-int add_color(color_info color) {
-
+int add_color(update_info *color, int key) {
+  XFreeColors(color->display, color->colormap, &color->background.pixel, 1, 0);
+  XFreeColors(color->display, color->colormap, &color->foreground.pixel, 1, 0);
+  printf("%i\n", color->channel_step);
+  switch(key){ 
+    case X_Q_KEY:
+      color->background.red += color->channel_step;
+      break;
+    case X_W_KEY:
+      color->background.green += color->channel_step;
+      printf("%i\n", color->background.green);
+      break;
+    case X_E_KEY:
+      color->background.blue += color->channel_step;
+      break;
+    case X_A_KEY:
+      color->background.red -= color->channel_step;
+      break;
+    case X_S_KEY:
+      color->background.green -= color->channel_step;
+      break;
+    case X_D_KEY:
+      color->background.blue -= color->channel_step;
+      break;
+    default:
+      printf("what the actual fuck is wrong with your program you cunt\n");
+      break;
+  }
+  color->foreground.red = 0xffff - color->background.red;
+  color->foreground.green = 0xffff - color->background.green;
+  color->foreground.blue = 0xffff - color->background.blue;
+  XAllocColor(color->display, color->colormap, &color->foreground);
+  XAllocColor(color->display, color->colormap, &color->background);
 }
 
+int redraw_display(update_info *display_summary, XTextItem *text_prompt, GC *gc, unsigned int textpos_y) {
+  XClearWindow(display_summary->display, display_summary->window);
+  XSetWindowBackground(display_summary->display, display_summary->window, display_summary->background.pixel);
+  XSetForeground(display_summary->display, *gc, display_summary->foreground.pixel);
+  printf("%i\n", display_summary->foreground.red);
+  XDrawText(display_summary->display, display_summary->window, *gc, TEXT_CORNER_OFFSET, textpos_y, text_prompt, 1);
+  
+}
 
 int main(void) {
 
-  char text_prompt_buffer[PROMPT_BUFSIZE] = ""; 
+  char text_prompt_buffer[PROMPT_BUFSIZE] = "Q/W/E increases R/G/B. A/S/D decreases R/G/B. Enter allows exact value. Press Escape to dismiss."; 
 
    Display *display;
    Window window;
@@ -53,9 +93,9 @@ int main(void) {
    
    //background colormap
    colormap = DefaultColormap(display, screen);
-   background_color.red = 1000;
+   background_color.red = 0;
    background_color.green = 0;
-   background_color.blue = 60000;
+   background_color.blue = 0;
 
    //text colormap
    foreground_color.red = 0xffff - background_color.red;
@@ -71,7 +111,7 @@ int main(void) {
 
    window = XCreateSimpleWindow(display, RootWindow(display, screen), 
        10, 10, 
-       100, 100, 
+       1920, 1080, 
        0,
        background_color.pixel,
        background_color.pixel); //last arg is color
@@ -79,7 +119,8 @@ int main(void) {
    XMapWindow(display, window);
    XSelectInput(display, window, KeyPressMask | ExposureMask);
    XGetWindowAttributes(display, window, &win_info); 
-   color_step = 0xffff / pow(2, (win_info.depth / 3)) ;
+   //TODO: this math is techincly one off in very, very specific scenarios
+   color_step = 0xffff / pow(2, (win_info.depth / 3)) + 0.5; 
 
 
 
@@ -112,18 +153,26 @@ int main(void) {
      XNextEvent(display, &event);
      switch (event.type) {
        case KeyPress:
+         printf("%i\n", event.xkey.keycode);
          if(is_prompt) {
            XClearWindow(display, window);
 
            text_buffer_space = PROMPT_BUFSIZE - text_prompt.nchars;
-
-           if(event.xkey.keycode == X_BACKSPACE) {
-             if(text_buffer_space < PROMPT_BUFSIZE) {
-                text_prompt.nchars--;
-             }
-           }
-           else if(text_buffer_space > 0) { 
-             text_prompt.nchars += XLookupString(&event.xkey, text_prompt_buffer + text_prompt.nchars, text_buffer_space, NULL, NULL);
+           switch(event.xkey.keycode) {
+             case X_BACKSPACE: 
+               if(text_buffer_space < PROMPT_BUFSIZE) {
+                  text_prompt.nchars--;
+               }
+               break;
+             case X_ESCAPE_KEY:
+               text_prompt.nchars = 0;
+               is_prompt = 0;
+               break;
+             default:
+               if(text_buffer_space > 0) { 
+                 text_prompt.nchars += XLookupString(&event.xkey, text_prompt_buffer + text_prompt.nchars, text_buffer_space, NULL, NULL);
+               }
+               break;
            }
            XDrawText(display, window, text_prompt_gc, TEXT_CORNER_OFFSET, textpos_y, &text_prompt, 1);
          }
@@ -131,31 +180,20 @@ int main(void) {
            switch(event.xkey.keycode) {
              case X_ENTER_KEY:
                break;
-             case X_Q_KEY:
-               printf("%i\n", channel_step);
-               XFreeColors(display, colormap, &background_color.pixel, 1, 0); 
-               XFreeColors(display, colormap, &foreground_color.pixel, 1, 0); 
-               background_color.red += channel_step;
-               foreground_color.red = 0xffff - background_color.red; //we could just sub channel_step, but eh. i donno.
-               printf("----%i\n", background_color.red);
-               XAllocColor(display, colormap, &foreground_color);
-               XAllocColor(display, colormap, &background_color);
-               XClearWindow(display, window);
-               XSetWindowBackground(display, window, background_color.pixel);
-               break;
-             case X_W_KEY:
-               break;
-             case X_E_KEY:
-               break;
-             case X_A_KEY:
-               break;
-             case X_S_KEY:
-               break;
+             case X_Q_KEY:        //if anyone is reading this, on a scale from 1-10,
+             case X_W_KEY:        //just how ugly is this?
+             case X_E_KEY:        //I don't know why, but it feels gross.
+             case X_A_KEY:        //to be fair, most of this code is just for me.
+             case X_S_KEY:        //otherwise, it'd be way cleaner.
              case X_D_KEY:
+               add_color(&display_summary, event.xkey.keycode);
                break;
+             case X_ESCAPE_KEY:
+               text_prompt.nchars = 0;
              default:
                break; 
            }
+           redraw_display(&display_summary, &text_prompt, &text_prompt_gc, textpos_y);
          }
 
 
@@ -165,7 +203,7 @@ int main(void) {
        case Expose:
          XGetWindowAttributes(display, window, &win_info); 
          textpos_y = win_info.height - TEXT_CORNER_OFFSET;
-         XDrawText(display, window, text_prompt_gc, TEXT_CORNER_OFFSET, textpos_y, &text_prompt, 1);
+         redraw_display(&display_summary, &text_prompt, &text_prompt_gc, textpos_y);
          break;
        default:
          break;
diff --git a/src/color.h b/src/color.h
new file mode 100644
index 0000000..ac81a01
--- /dev/null
+++ b/src/color.h
@@ -0,0 +1,24 @@
+#define PROMPT_BUFSIZE 256
+
+#define X_ENTER_KEY   36
+#define X_BACKSPACE   22
+#define X_ESCAPE_KEY  9
+
+#define X_Q_KEY     24
+#define X_W_KEY     25
+#define X_E_KEY     26
+
+#define X_A_KEY     38
+#define X_S_KEY     39
+#define X_D_KEY     40
+
+#define TEXT_CORNER_OFFSET 25
+
+typedef struct {
+  Window window; 
+  Display *display;
+  Colormap colormap;
+  XColor background;
+  XColor foreground;
+  unsigned int channel_step;
+} update_info;