From f695b4b18a5c2c9a55e3a87167278f3e582505ff Mon Sep 17 00:00:00 2001 From: Geoff Voelker Date: Thu, 24 Sep 1998 02:14:55 +0000 Subject: [PATCH] (w32_color_map_lookup): New function. (x_to_w32_color): Approximate colors ending in numbers if necessary. --- src/w32fns.c | 61 +++++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 48 insertions(+), 13 deletions(-) diff --git a/src/w32fns.c b/src/w32fns.c index ea683d08fef..1253ecda0a7 100644 --- a/src/w32fns.c +++ b/src/w32fns.c @@ -1266,6 +1266,38 @@ w32_to_x_color (rgb) return Qnil; } +COLORREF +w32_color_map_lookup (colorname) + char *colorname; +{ + Lisp_Object tail, ret = Qnil; + + BLOCK_INPUT; + + for (tail = Vw32_color_map; !NILP (tail); tail = Fcdr (tail)) + { + register Lisp_Object elt, tem; + + elt = Fcar (tail); + if (!CONSP (elt)) continue; + + tem = Fcar (elt); + + if (lstrcmpi (XSTRING (tem)->data, colorname) == 0) + { + ret = XUINT (Fcdr (elt)); + break; + } + + QUIT; + } + + + UNBLOCK_INPUT; + + return ret; +} + COLORREF x_to_w32_color (colorname) char * colorname; @@ -1430,27 +1462,30 @@ x_to_w32_color (colorname) /* I am not going to attempt to handle any of the CIE color schemes or TekHVC, since I don't know the algorithms for conversion to RGB. */ - - for (tail = Vw32_color_map; !NILP (tail); tail = Fcdr (tail)) + + /* If we fail to lookup the color name in w32_color_map, then check the + colorname to see if it can be crudely approximated: If the X color + ends in a number (e.g., "darkseagreen2"), strip the number and + return the result of looking up the base color name. */ + ret = w32_color_map_lookup (colorname); + if (NILP (ret)) { - register Lisp_Object elt, tem; + int len = strlen (colorname); - elt = Fcar (tail); - if (!CONSP (elt)) continue; + if (isdigit (colorname[len - 1])) + { + char *ptr, *approx = alloca (len); - tem = Fcar (elt); + strcpy (approx, colorname); + ptr = &approx[len - 1]; + while (ptr > approx && isdigit (*ptr)) + *ptr-- = '\0'; - if (lstrcmpi (XSTRING (tem)->data, colorname) == 0) - { - ret = XUINT(Fcdr (elt)); - break; + ret = w32_color_map_lookup (approx); } - - QUIT; } UNBLOCK_INPUT; - return ret; } -- 2.39.2