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;