summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/color.c105
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;
- }
+ }
}