diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/color.c | 105 |
1 files changed, 93 insertions, 12 deletions
diff --git a/src/color.c b/src/color.c index 8721140..bdf0239 100644 --- a/src/color.c +++ b/src/color.c @@ -1,15 +1,27 @@ #include <X11/Xlib.h> +#include <X11/Xutil.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <errno.h> -//TODO: fix your ugly ass vim colors, I don't care if it's part of the code +#define PROMPT_BUFSIZE 32 + +#define X_ENTER_KEY 36 + +#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 + int main(void) { - char text_prompt_buffer[32] = "testing"; //TODO: everything + char text_prompt_buffer[PROMPT_BUFSIZE] = ""; Display *display; Window window; @@ -18,10 +30,22 @@ int main(void) { int screen; XColor background_color; + XColor foreground_color; XTextItem text_prompt; XGCValues text_prompt_formatting; GC text_prompt_gc; + int text_buffer_space; + + int is_prompt = 0; + + unsigned int winsize_x; + unsigned int winsize_y; + + XFontStruct* font; + + XWindowAttributes win_info; + @@ -32,13 +56,21 @@ int main(void) { } screen = DefaultScreen(display); - colormap = DefaultColormap(display, screen); - background_color.red = 0; - background_color.green = 65535; - background_color.blue = 0; + //background colormap + colormap = DefaultColormap(display, screen); + background_color.red = 1000; + background_color.green = 0; + background_color.blue = 60000; + + //text colormap + foreground_color.red = 0xffff - background_color.red; + foreground_color.green = 0xffff - background_color.green; + foreground_color.blue = 0xffff - background_color.blue; XAllocColor(display, colormap, &background_color); + XAllocColor(display, colormap, &foreground_color); + window = XCreateSimpleWindow(display, RootWindow(display, screen), @@ -59,23 +91,72 @@ int main(void) { text_prompt.font = None; //text formatting struct - text_prompt_formatting.foreground = BlackPixel(display, screen); - text_prompt_gc = XCreateGC(display, window, GCForeground | GCBackground, &text_prompt_formatting); + text_prompt_formatting.foreground = foreground_color.pixel; + + text_prompt_gc = XCreateGC(display, window, GCForeground | GCLineWidth, &text_prompt_formatting); + font = XLoadQueryFont(display, "-*-helvetica-medium-r-normal-*-20-*"); + XSetFont(display, text_prompt_gc, font->fid); for(;;) { XNextEvent(display, &event); + XGetWindowAttributes(display, window, &win_info); + winsize_x = win_info.width; + winsize_y = win_info.height; switch (event.type) { case KeyPress: - printf("Key press\n"); + 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_ENTER_KEY) { + 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); + } + } + else { + switch(event.xkey.keycode) { + case X_ENTER_KEY: + break; + case X_Q_KEY: + printf("%i\n", background_color.red); + XFreeColors(display, colormap, &background_color.pixel, 1, NULL); + background_color.red += 1000; + printf("%i\n", background_color.red); + XAllocColor(display, colormap, &background_color); + break; + case X_W_KEY: + break; + case X_E_KEY: + break; + case X_A_KEY: + break; + case X_S_KEY: + break; + case X_D_KEY: + break; + default: + break; + } + } + + + + XDrawText(display, window, text_prompt_gc, 10, winsize_y - 10, &text_prompt, 1); break; case Expose: - XDrawText(display, window, text_prompt_gc, 10, 10, &text_prompt, 1); //TODO learn inverting math, move to bottom right of window + XDrawText(display, window, text_prompt_gc, 10, winsize_y - 10, &text_prompt, 1); + printf("exposed\n"); break; default: - printf("wot\n"); break; - } + } } |