]> git.sur5r.net Git - i3/i3/commitdiff
Move get_colorpixel to libi3, use it everywhere else
authorMichael Stapelberg <michael@stapelberg.de>
Sun, 23 Oct 2011 16:38:21 +0000 (17:38 +0100)
committerMichael Stapelberg <michael@stapelberg.de>
Sun, 23 Oct 2011 16:38:21 +0000 (17:38 +0100)
19 files changed:
i3-config-wizard/main.c
i3-config-wizard/xcb.c
i3-config-wizard/xcb.h
i3-input/i3-input.h
i3-input/main.c
i3-input/xcb.c
i3-nagbar/Makefile
i3-nagbar/i3-nagbar.h
i3-nagbar/main.c
i3-nagbar/xcb.c
i3bar/src/xcb.c
include/libi3.h
include/xcb.h
libi3/get_colorpixel.c [new file with mode: 0644]
libi3/get_socket_path.c
libi3/ipc_connect.c
libi3/ipc_send_message.c
libi3/safewrappers.c
src/xcb.c

index d3f9bcbf439c923bad01f17032a68df0d7bc23e8..2355750f6a84d1bc57cb8b4003c64d82a4f173e2 100644 (file)
@@ -137,7 +137,7 @@ static char *resolve_tilde(const char *path) {
 static int handle_expose() {
     /* re-draw the background */
     xcb_rectangle_t border = {0, 0, 300, (15*font_height) + 8};
-    xcb_change_gc_single(conn, pixmap_gc, XCB_GC_FOREGROUND, get_colorpixel(conn, "#000000"));
+    xcb_change_gc_single(conn, pixmap_gc, XCB_GC_FOREGROUND, get_colorpixel("#000000"));
     xcb_poly_fill_rectangle(conn, pixmap, pixmap_gc, 1, &border);
 
     xcb_change_gc_single(conn, pixmap_gc, XCB_GC_FONT, font_id);
@@ -146,7 +146,7 @@ static int handle_expose() {
 
     if (current_step == STEP_WELCOME) {
         /* restore font color */
-        xcb_change_gc_single(conn, pixmap_gc, XCB_GC_FOREGROUND, get_colorpixel(conn, "#FFFFFF"));
+        xcb_change_gc_single(conn, pixmap_gc, XCB_GC_FOREGROUND, get_colorpixel("#FFFFFF"));
 
         txt(10, 2, "You have not configured i3 yet.");
         txt(10, 3, "Do you want me to generate ~/.i3/config?");
@@ -154,16 +154,16 @@ static int handle_expose() {
         txt(85, 7, "No, I will use the defaults");
 
         /* green */
-        xcb_change_gc_single(conn, pixmap_gc, XCB_GC_FOREGROUND, get_colorpixel(conn, "#00FF00"));
+        xcb_change_gc_single(conn, pixmap_gc, XCB_GC_FOREGROUND, get_colorpixel("#00FF00"));
         txt(25, 5, "<Enter>");
 
         /* red */
-        xcb_change_gc_single(conn, pixmap_gc, XCB_GC_FOREGROUND, get_colorpixel(conn, "#FF0000"));
+        xcb_change_gc_single(conn, pixmap_gc, XCB_GC_FOREGROUND, get_colorpixel("#FF0000"));
         txt(31, 7, "<ESC>");
     }
 
     if (current_step == STEP_GENERATE) {
-        xcb_change_gc_single(conn, pixmap_gc, XCB_GC_FOREGROUND, get_colorpixel(conn, "#FFFFFF"));
+        xcb_change_gc_single(conn, pixmap_gc, XCB_GC_FOREGROUND, get_colorpixel("#FFFFFF"));
 
         txt(10, 2, "Please choose either:");
         txt(85, 4, "Win as default modifier");
@@ -185,13 +185,13 @@ static int handle_expose() {
 
         /* green */
         uint32_t mask = XCB_GC_FOREGROUND | XCB_GC_FONT;
-        uint32_t values[] = { get_colorpixel(conn, "#00FF00"), font_id };
+        uint32_t values[] = { get_colorpixel("#00FF00"), font_id };
         xcb_change_gc(conn, pixmap_gc, mask, values);
 
         txt(25, 9, "<Enter>");
 
         /* red */
-        xcb_change_gc_single(conn, pixmap_gc, XCB_GC_FOREGROUND, get_colorpixel(conn, "#FF0000"));
+        xcb_change_gc_single(conn, pixmap_gc, XCB_GC_FOREGROUND, get_colorpixel("#FF0000"));
         txt(31, 10, "<ESC>");
     }
 
index 461dfd529b7dbbe3bd731dd21b94bd8205684746..438c6507422469de4164d892572348bdd4808018 100644 (file)
@@ -32,26 +32,6 @@ void xcb_change_gc_single(xcb_connection_t *conn, xcb_gcontext_t gc, uint32_t ma
         xcb_change_gc(conn, gc, mask, &value);
 }
 
-/*
- * Returns the colorpixel to use for the given hex color (think of HTML).
- *
- * The hex_color has to start with #, for example #FF00FF.
- *
- * NOTE that get_colorpixel() does _NOT_ check the given color code for validity.
- * This has to be done by the caller.
- *
- */
-uint32_t get_colorpixel(xcb_connection_t *conn, char *hex) {
-        char strgroups[3][3] = {{hex[1], hex[2], '\0'},
-                                {hex[3], hex[4], '\0'},
-                                {hex[5], hex[6], '\0'}};
-        uint32_t rgb16[3] = {(strtol(strgroups[0], NULL, 16)),
-                             (strtol(strgroups[1], NULL, 16)),
-                             (strtol(strgroups[2], NULL, 16))};
-
-        return (rgb16[0] << 16) + (rgb16[1] << 8) + rgb16[2];
-}
-
 /*
  * Returns the mask for Mode_switch (to be used for looking up keysymbols by
  * keycode).
index 40aeec8864fdec22fb2a8e86a232fb8fef981061..748fb1db57a81299418afca4352f7ada3332a236 100644 (file)
@@ -11,7 +11,6 @@
 extern unsigned int xcb_numlock_mask;
 
 void xcb_change_gc_single(xcb_connection_t *conn, xcb_gcontext_t gc, uint32_t mask, uint32_t value);
-uint32_t get_colorpixel(xcb_connection_t *conn, char *hex);
 uint32_t get_mod_mask(xcb_connection_t *conn, uint32_t keycode);
 xcb_window_t open_input_window(xcb_connection_t *conn, uint32_t width, uint32_t height);
 int get_font_id(xcb_connection_t *conn, char *pattern, int *font_height);
index 934ada038cb14a999270c44bef5e28fc88008015..300cb335ccde8761ac00a94d9c83622ab9223440 100644 (file)
@@ -16,7 +16,6 @@ extern xcb_window_t root;
 
 char *convert_ucs_to_utf8(char *input);
 char *convert_utf8_to_ucs2(char *input, int *real_strlen);
-uint32_t get_colorpixel(xcb_connection_t *conn, char *hex);
 uint32_t get_mod_mask(xcb_connection_t *conn, uint32_t keycode);
 xcb_window_t open_input_window(xcb_connection_t *conn, uint32_t width, uint32_t height);
 int get_font_id(xcb_connection_t *conn, char *pattern, int *font_height);
index 931afc2bddeaf6a3165eef72cb8d7b822d9a8dc7..bd4592e7543c5c279659813953d77631ea16f83d 100644 (file)
@@ -92,13 +92,13 @@ static int handle_expose(void *data, xcb_connection_t *conn, xcb_expose_event_t
 
     /* re-draw the background */
     xcb_rectangle_t border = {0, 0, 500, font_height + 8}, inner = {2, 2, 496, font_height + 8 - 4};
-    xcb_change_gc(conn, pixmap_gc, XCB_GC_FOREGROUND, (uint32_t[]){ get_colorpixel(conn, "#FF0000") });
+    xcb_change_gc(conn, pixmap_gc, XCB_GC_FOREGROUND, (uint32_t[]){ get_colorpixel("#FF0000") });
     xcb_poly_fill_rectangle(conn, pixmap, pixmap_gc, 1, &border);
-    xcb_change_gc(conn, pixmap_gc, XCB_GC_FOREGROUND, (uint32_t[]){ get_colorpixel(conn, "#000000") });
+    xcb_change_gc(conn, pixmap_gc, XCB_GC_FOREGROUND, (uint32_t[]){ get_colorpixel("#000000") });
     xcb_poly_fill_rectangle(conn, pixmap, pixmap_gc, 1, &inner);
 
     /* restore font color */
-    xcb_change_gc(conn, pixmap_gc, XCB_GC_FOREGROUND, (uint32_t[]){ get_colorpixel(conn, "#FFFFFF") });
+    xcb_change_gc(conn, pixmap_gc, XCB_GC_FOREGROUND, (uint32_t[]){ get_colorpixel("#FFFFFF") });
     uint8_t *con = concat_strings(glyphs_ucs, input_position);
     char *full_text = (char*)con;
     if (prompt != NULL) {
index 0c7e9434e31bcf8257763e4cf0d5b9f4a8b3ba28..ae2dcd1b993bdc52a213c9a526f14959b2a786a6 100644 (file)
 
 #include "i3-input.h"
 
-/*
- * Returns the colorpixel to use for the given hex color (think of HTML).
- *
- * The hex_color has to start with #, for example #FF00FF.
- *
- * NOTE that get_colorpixel() does _NOT_ check the given color code for validity.
- * This has to be done by the caller.
- *
- */
-uint32_t get_colorpixel(xcb_connection_t *conn, char *hex) {
-        char strgroups[3][3] = {{hex[1], hex[2], '\0'},
-                                {hex[3], hex[4], '\0'},
-                                {hex[5], hex[6], '\0'}};
-        uint32_t rgb16[3] = {(strtol(strgroups[0], NULL, 16)),
-                             (strtol(strgroups[1], NULL, 16)),
-                             (strtol(strgroups[2], NULL, 16))};
-
-        return (rgb16[0] << 16) + (rgb16[1] << 8) + rgb16[2];
-}
-
 /*
  * Returns the mask for Mode_switch (to be used for looking up keysymbols by
  * keycode).
index fed223db221325500a94497853d4357cc9ef16ff..05a5b911c3f40224d13c33f61012b6f8fa0638ee 100644 (file)
@@ -3,6 +3,8 @@ TOPDIR=..
 
 include $(TOPDIR)/common.mk
 
+CPPFLAGS += -I$(TOPDIR)/include
+
 # Depend on the object files of all source-files in src/*.c and on all header files
 FILES=$(patsubst %.c,%.o,$(wildcard *.c))
 HEADERS=$(wildcard *.h)
@@ -14,9 +16,12 @@ HEADERS=$(wildcard *.h)
 
 all: i3-nagbar
 
-i3-nagbar: ${FILES}
+i3-nagbar: $(TOPDIR)/libi3/libi3.a ${FILES}
        echo "[i3-nagbar] LINK i3-nagbar"
-       $(CC) $(LDFLAGS) -o $@ ${FILES} $(LIBS)
+       $(CC) $(LDFLAGS) -o $@ $(filter-out libi3/libi3.a,$^) $(LIBS)
+
+$(TOPDIR)/libi3/%.a: $(TOPDIR)/libi3/*.c
+       $(MAKE) -C $(TOPDIR)/libi3
 
 install: all
        echo "[i3-nagbar] INSTALL"
index 2fbe3cbb4cf68bed1784ba6e4173f8f8c2388121..04131e4b5723a1aed34662ad169064983bef0f16 100644 (file)
@@ -18,7 +18,6 @@ while (0)
 
 extern xcb_window_t root;
 
-uint32_t get_colorpixel(xcb_connection_t *conn, char *hex);
 xcb_window_t open_input_window(xcb_connection_t *conn, uint32_t width, uint32_t height);
 int get_font_id(xcb_connection_t *conn, char *pattern, int *font_height);
 void xcb_change_gc_single(xcb_connection_t *conn, xcb_gcontext_t gc, uint32_t mask, uint32_t value);
index 254aedfbb3eb6bc0e3b73ab26d9107bcc137ed68..0a3e5150fec9607ffae75f97726d9657c0178f8a 100644 (file)
@@ -28,6 +28,7 @@
 #include <xcb/xcb_aux.h>
 #include <xcb/xcb_event.h>
 
+#include "libi3.h"
 #include "i3-nagbar.h"
 
 typedef struct {
@@ -287,18 +288,18 @@ int main(int argc, char *argv[]) {
 
     if (bar_type == TYPE_ERROR) {
         /* Red theme for error messages */
-        color_button_background = get_colorpixel(conn, "#680a0a");
-        color_background = get_colorpixel(conn, "#900000");
-        color_text = get_colorpixel(conn, "#ffffff");
-        color_border = get_colorpixel(conn, "#d92424");
-        color_border_bottom = get_colorpixel(conn, "#470909");
+        color_button_background = get_colorpixel("#680a0a");
+        color_background = get_colorpixel("#900000");
+        color_text = get_colorpixel("#ffffff");
+        color_border = get_colorpixel("#d92424");
+        color_border_bottom = get_colorpixel("#470909");
     } else {
         /* Yellowish theme for warnings */
-        color_button_background = get_colorpixel(conn, "#ffc100");
-        color_background = get_colorpixel(conn, "#ffa8000");
-        color_text = get_colorpixel(conn, "#000000");
-        color_border = get_colorpixel(conn, "#ab7100");
-        color_border_bottom = get_colorpixel(conn, "#ab7100");
+        color_button_background = get_colorpixel("#ffc100");
+        color_background = get_colorpixel("#ffa8000");
+        color_text = get_colorpixel("#000000");
+        color_border = get_colorpixel("#ab7100");
+        color_border_bottom = get_colorpixel("#ab7100");
     }
 
     uint32_t font_id = get_font_id(conn, pattern, &font_height);
index ed1bfd89935ab0362964d4380fbd3d11f2316b34..7148133d6c8725e0acd023008cff783d0ba15aa6 100644 (file)
@@ -28,26 +28,6 @@ void xcb_change_gc_single(xcb_connection_t *conn, xcb_gcontext_t gc, uint32_t ma
         xcb_change_gc(conn, gc, mask, &value);
 }
 
-/*
- * Returns the colorpixel to use for the given hex color (think of HTML).
- *
- * The hex_color has to start with #, for example #FF00FF.
- *
- * NOTE that get_colorpixel() does _NOT_ check the given color code for validity.
- * This has to be done by the caller.
- *
- */
-uint32_t get_colorpixel(xcb_connection_t *conn, char *hex) {
-        char strgroups[3][3] = {{hex[1], hex[2], '\0'},
-                                {hex[3], hex[4], '\0'},
-                                {hex[5], hex[6], '\0'}};
-        uint32_t rgb16[3] = {(strtol(strgroups[0], NULL, 16)),
-                             (strtol(strgroups[1], NULL, 16)),
-                             (strtol(strgroups[2], NULL, 16))};
-
-        return (rgb16[0] << 16) + (rgb16[1] << 8) + rgb16[2];
-}
-
 /*
  * Opens the window we use for input/output and maps it
  *
index b5b79ae2e4c32a6570557c282279bcb4ce1dffe5..076fe7911de003106909308297522cfc33b216d0 100644 (file)
@@ -194,21 +194,6 @@ void draw_text(xcb_drawable_t drawable, xcb_gcontext_t ctx, int16_t x, int16_t y
     }
 }
 
-/*
- * Converts a colorstring to a colorpixel as expected from xcb_change_gc.
- * s is assumed to be in the format "rrggbb"
- *
- */
-uint32_t get_colorpixel(const char *s) {
-    char strings[3][3] = { { s[0], s[1], '\0'} ,
-                           { s[2], s[3], '\0'} ,
-                           { s[4], s[5], '\0'} };
-    uint8_t r = strtol(strings[0], NULL, 16);
-    uint8_t g = strtol(strings[1], NULL, 16);
-    uint8_t b = strtol(strings[2], NULL, 16);
-    return (r << 16 | g << 8 | b);
-}
-
 /*
  * Redraws the statusline to the buffer
  *
index 9e9c401220ea5455b707b9369aec0a8e394c6a09..797ba424b0884d679277cee34fde862027790165 100644 (file)
@@ -93,4 +93,20 @@ int ipc_recv_message(int sockfd, uint32_t message_type,
  */
 void fake_configure_notify(xcb_connection_t *conn, xcb_rectangle_t r, xcb_window_t window, int border_width);
 
+/**
+ * Returns the colorpixel to use for the given hex color (think of HTML). Only
+ * works for true-color (vast majority of cases) at the moment, avoiding a
+ * roundtrip to X11.
+ *
+ * The hex_color has to start with #, for example #FF00FF.
+ *
+ * NOTE that get_colorpixel() does _NOT_ check the given color code for validity.
+ * This has to be done by the caller.
+ *
+ * NOTE that this function may in the future rely on a global xcb_connection_t
+ * variable called 'conn' to be present.
+ *
+ */
+uint32_t get_colorpixel(const char *hex) __attribute__((const));
+
 #endif
index 65e4e6c389bd60f4c846abf98913f639872d7b2d..ef6ed197eb49340354cc83de4b3b55078df0a659 100644 (file)
@@ -60,17 +60,6 @@ extern unsigned int xcb_numlock_mask;
  */
 i3Font load_font(const char *pattern, bool fallback);
 
-/**
- * Returns the colorpixel to use for the given hex color (think of HTML).
- *
- * The hex_color has to start with #, for example #FF00FF.
- *
- * NOTE that get_colorpixel() does _NOT_ check the given color code for
- * validity.  This has to be done by the caller.
- *
- */
-uint32_t get_colorpixel(char *hex);
-
 /**
  * Convenience wrapper around xcb_create_window which takes care of depth,
  * generating an ID and checking for errors.
diff --git a/libi3/get_colorpixel.c b/libi3/get_colorpixel.c
new file mode 100644 (file)
index 0000000..bdd9f5a
--- /dev/null
@@ -0,0 +1,39 @@
+/*
+ * vim:ts=4:sw=4:expandtab
+ *
+ * i3 - an improved dynamic tiling window manager
+ *
+ * © 2009-2011 Michael Stapelberg and contributors
+ *
+ * See file LICENSE for license information.
+ *
+ */
+#include <stdlib.h>
+#include <stdint.h>
+
+#include "libi3.h"
+
+/*
+ * Returns the colorpixel to use for the given hex color (think of HTML). Only
+ * works for true-color (vast majority of cases) at the moment, avoiding a
+ * roundtrip to X11.
+ *
+ * The hex_color has to start with #, for example #FF00FF.
+ *
+ * NOTE that get_colorpixel() does _NOT_ check the given color code for validity.
+ * This has to be done by the caller.
+ *
+ * NOTE that this function may in the future rely on a global xcb_connection_t
+ * variable called 'conn' to be present.
+ *
+ */
+uint32_t get_colorpixel(const char *hex) {
+    char strgroups[3][3] = {{hex[1], hex[2], '\0'},
+                            {hex[3], hex[4], '\0'},
+                            {hex[5], hex[6], '\0'}};
+    uint8_t r = strtol(strgroups[0], NULL, 16);
+    uint8_t g = strtol(strgroups[1], NULL, 16);
+    uint8_t b = strtol(strgroups[2], NULL, 16);
+
+    return (r << 16 | g << 8 | b);
+}
index 9e02ec51bedee2f7a673a7d033fc8e4f44fe27d8..839bcd4232b8aa2ddd8d817f6ac8627d9243ab80 100644 (file)
@@ -16,6 +16,8 @@
 #include <xcb/xcb.h>
 #include <xcb/xcb_aux.h>
 
+#include "libi3.h"
+
 /*
  * Try to get the socket path from X11 and return NULL if it doesn’t work.
  *
index 2c41fcc2d54b9144ead4b214aa6d9f2e1178555d..d19d2fab6b3ebd2dfd504fb9d9bc4d8a1eb5884a 100644 (file)
@@ -15,6 +15,8 @@
 #include <err.h>
 #include <stdlib.h>
 
+#include "libi3.h"
+
 /*
  * Connects to the i3 IPC socket and returns the file descriptor for the
  * socket. die()s if anything goes wrong.
index ff395adad0299d2cbd615ab246f7b36f1d436b2b..05b1874799db0c76ed34756f96bafdc105906b89 100644 (file)
@@ -16,6 +16,8 @@
 
 #include <i3/ipc.h>
 
+#include "libi3.h"
+
 /*
  * Formats a message (payload) of the given size and type and sends it to i3 via
  * the given socket file descriptor.
index 2403578dc41da66bd32ce17f4a7d4f455255ab96..ec62aa34f5f98ac6390c089be570aaa57a67fb04 100644 (file)
@@ -14,6 +14,7 @@
 #include <stdio.h>
 #include <err.h>
 
+#include "libi3.h"
 
 /*
  * The s* functions (safe) are wrappers around malloc, strdup, …, which exits if one of
index 858e4985005ca926d575a6099fd4d27d1bc61990..577c023d67d4d696ba48a5a0461549170fb8187b 100644 (file)
--- a/src/xcb.c
+++ b/src/xcb.c
@@ -63,26 +63,6 @@ i3Font load_font(const char *pattern, bool fallback) {
     return new;
 }
 
-/*
- * Returns the colorpixel to use for the given hex color (think of HTML).
- *
- * The hex_color has to start with #, for example #FF00FF.
- *
- * NOTE that get_colorpixel() does _NOT_ check the given color code for validity.
- * This has to be done by the caller.
- *
- */
-uint32_t get_colorpixel(char *hex) {
-    char strgroups[3][3] = {{hex[1], hex[2], '\0'},
-                            {hex[3], hex[4], '\0'},
-                            {hex[5], hex[6], '\0'}};
-    uint32_t rgb16[3] = {(strtol(strgroups[0], NULL, 16)),
-                         (strtol(strgroups[1], NULL, 16)),
-                         (strtol(strgroups[2], NULL, 16))};
-
-    return (rgb16[0] << 16) + (rgb16[1] << 8) + rgb16[2];
-}
-
 /*
  * Convenience wrapper around xcb_create_window which takes care of depth, generating an ID and checking
  * for errors.