From 8e7f8c02a1c6f1a916376f43cbce1271225c2ec7 Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Tue, 21 Feb 2012 00:59:16 -0600 Subject: cache return values of XAllocNamedColor round trip to the server on every color lookup is pretty bad --- draw.c | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) (limited to 'draw.c') diff --git a/draw.c b/draw.c index 6e99586..f20ff45 100644 --- a/draw.c +++ b/draw.c @@ -103,13 +103,19 @@ drawtext(const char *text, int reverse, int line, int align) { long getcolor(const char *colstr) { - Colormap cmap = DefaultColormap(dzen.dpy, dzen.screen); - XColor color; + long color; + if ((color = colorcache_get(colstr)) != -1) + return color; + else { + Colormap cmap = DefaultColormap(dzen.dpy, dzen.screen); + XColor color; - if(!XAllocNamedColor(dzen.dpy, cmap, colstr, &color, &color)) - return -1; + if(!XAllocNamedColor(dzen.dpy, cmap, colstr, &color, &color)) + return -1; - return color.pixel; + colorcache_set(colstr, color.pixel); + return color.pixel; + } } void -- cgit v1.2.3-54-g00ecf