From 64231492f3d4efcbc7b9874442e69a650d730591 Mon Sep 17 00:00:00 2001 From: "jan.nijtmans" Date: Mon, 19 Mar 2012 14:26:26 +0000 Subject: experiment: use web colors in stead of X11 colors (win only) --- tests/color.test | 2 +- xlib/rgb.txt | 33 ++++++++++++++++++++++++++++----- xlib/xcolors.c | 22 +++++++++++++++------- 3 files changed, 44 insertions(+), 13 deletions(-) diff --git a/tests/color.test b/tests/color.test index 8557252..2308964 100644 --- a/tests/color.test +++ b/tests/color.test @@ -154,7 +154,7 @@ test color-1.4 {Tk_AllocColorFromObj - try other colors in list} colorsFree { pack .b2 -side top lappend result [testcolor purple] } {{{1 1}} {{1 1} {1 0}} {{1 0} {2 1}}} -test color-1.5 {Color table} nonPortable { +test color-1.5 {Color table} { set fd [open ../xlib/rgb.txt] set result {} while {[gets $fd line] != -1} { diff --git a/xlib/rgb.txt b/xlib/rgb.txt index 67b979e..7a4f983 100644 --- a/xlib/rgb.txt +++ b/xlib/rgb.txt @@ -1,3 +1,18 @@ +! Changes compared to Xorg:rgb.txt +! name old value new value +! aqua - 0 255 255 +! crimson - 220 20 60 +! fuchsia - 255 0 255 +! gray 190 190 190 128 128 128 +! green 0 255 0 0 128 0 +! grey 190 190 190 128 128 128 +! indigo - 75 0 130 +! lime - 0 255 0 +! maroon 176 48 96 128 0 0 +! olive - 128 128 0 +! purple 160 32 240 128 0 128 +! silver - 192 192 192 +! teal - 0 128 128 ! 240 248 255 aliceBlue 250 235 215 antiqueWhite @@ -5,6 +20,7 @@ 238 223 204 antiqueWhite2 205 192 176 antiqueWhite3 139 131 120 antiqueWhite4 + 0 255 255 aqua 127 255 212 aquamarine 127 255 212 aquamarine1 118 238 198 aquamarine2 @@ -65,6 +81,7 @@ 238 232 205 cornsilk2 205 200 177 cornsilk3 139 136 120 cornsilk4 +220 20 60 crimson 0 255 255 cyan 0 255 255 cyan1 0 238 238 cyan2 @@ -137,6 +154,7 @@ 139 26 26 firebrick4 255 250 240 floralWhite 34 139 34 forestGreen +255 0 255 fuchsia 220 220 220 gainsboro 248 248 255 ghostWhite 255 215 0 gold @@ -149,7 +167,7 @@ 238 180 34 goldenrod2 205 155 29 goldenrod3 139 105 20 goldenrod4 -190 190 190 gray +128 128 128 gray 3 3 3 gray1 5 5 5 gray2 8 8 8 gray3 @@ -251,13 +269,13 @@ 252 252 252 gray99 255 255 255 gray100 0 0 0 gray0 - 0 255 0 green + 0 128 0 green 0 255 0 green1 0 238 0 green2 0 205 0 green3 0 139 0 green4 173 255 47 greenYellow -190 190 190 grey +128 128 128 grey 3 3 3 grey1 5 5 5 grey2 8 8 8 grey3 @@ -374,6 +392,7 @@ 238 99 99 indianRed2 205 85 85 indianRed3 139 58 58 indianRed4 + 75 0 130 indigo 255 255 240 ivory 255 255 240 ivory1 238 238 224 ivory2 @@ -445,6 +464,7 @@ 238 238 209 lightYellow2 205 205 180 lightYellow3 139 139 122 lightYellow4 + 0 255 0 lime 50 205 50 limeGreen 250 240 230 linen 255 0 255 magenta @@ -452,7 +472,7 @@ 238 0 238 magenta2 205 0 205 magenta3 139 0 139 magenta4 -176 48 96 maroon +128 0 0 maroon 255 52 179 maroon1 238 48 167 maroon2 205 41 144 maroon3 @@ -490,6 +510,7 @@ 0 0 128 navy 0 0 128 navyBlue 253 245 230 oldLace +128 128 0 olive 107 142 35 oliveDrab 192 255 62 oliveDrab1 179 238 58 oliveDrab2 @@ -544,7 +565,7 @@ 205 150 205 plum3 139 102 139 plum4 176 224 230 powderBlue -160 32 240 purple +128 0 128 purple 155 48 255 purple1 145 44 238 purple2 125 38 205 purple3 @@ -586,6 +607,7 @@ 238 121 66 sienna2 205 104 57 sienna3 139 71 38 sienna4 +192 192 192 silver 135 206 235 skyBlue 135 206 255 skyBlue1 126 192 238 skyBlue2 @@ -622,6 +644,7 @@ 238 154 73 tan2 205 133 63 tan3 139 90 43 tan4 + 0 128 128 teal 216 191 216 thistle 255 225 255 thistle1 238 210 238 thistle2 diff --git a/xlib/xcolors.c b/xlib/xcolors.c index 7a83146..11ab6a0 100644 --- a/xlib/xcolors.c +++ b/xlib/xcolors.c @@ -17,8 +17,8 @@ * Index array. For each of the characters 'a'-'y', this table gives the first color * starting with that character in the xColors table. */ -static int az[] = {0, 4, 12, 19, 43, 43, 46, 56, 58, 60, 60, 61, 84, 99, - 102, 107, 118, 118, 121, 134, 138, 138, 140, 143, 143, 145}; +static int az[] = {0, 5, 13, 21, 45, 45, 49, 59, 61, 64, 64, 65, 89, 104, + 107, 113, 124, 124, 127, 141, 146, 146, 148, 151, 151, 153}; /* * Define an array that defines the mapping from color names to RGB values. @@ -43,6 +43,7 @@ static const elem xColors[] = { /* Colors starting with 'a' */ "liceBlue\0 \360\370\377\0", "ntiqueWhite\0 \213\203\170\315\300\260\356\337\314\377\357\333\372\353\327\4", + "qua\0 \000\377\377\0", "quamarine\0 \105\213\164\146\315\252\166\356\306\177\377\324\177\377\324\4", "zure\0 \203\213\213\301\315\315\340\356\356\360\377\377\360\377\377\4", /* Colors starting with 'b' */ @@ -61,6 +62,7 @@ static const elem xColors[] = { "oral\0 \213\076\057\315\133\105\356\152\120\377\162\126\377\177\120\4", "ornflowerBlue\0 \144\225\355\0", "ornsilk\0 \213\210\170\315\310\261\356\350\315\377\370\334\377\370\334\4", + "rimson\0 \334\024\074\0", "yan\0 \000\213\213\000\315\315\000\356\356\000\377\377\000\377\377\4", /* Colors starting with 'd' */ "arkBlue\0 \000\000\213\0", @@ -92,24 +94,26 @@ static const elem xColors[] = { "irebrick\0 \213\032\032\315\046\046\356\054\054\377\060\060\262\042\042\4", "loralWhite\0 \377\372\360\0", "orestGreen\0 \042\213\042\0", + "uchsia\0 \377\000\377\0", /* Colors starting with 'g' */ "ainsboro\0 \334\334\334\0", "hostWhite\0 \370\370\377\0", "old\0 \213\165\000\315\255\000\356\311\000\377\327\000\377\327\000\4", "oldenrod\0 \213\151\024\315\233\035\356\264\042\377\301\045\332\245\040\4", "ray\0\024\024\024\022\022\022\017\017\017\015\015\015\012\012\012" - "\010\010\010\005\005\005\003\003\003\276\276\276\10", + "\010\010\010\005\005\005\003\003\003\200\200\200\10", "ray0\0 \000\000\000\0", - "reen\0 \000\213\000\000\315\000\000\356\000\000\377\000\000\377\000\4", + "reen\0 \000\213\000\000\315\000\000\356\000\000\377\000\000\200\000\4", "reenYellow\0 \255\377\057\0", "rey\0\024\024\024\022\022\022\017\017\017\015\015\015\012\012\012" - "\010\010\010\005\005\005\003\003\003\276\276\276\10", + "\010\010\010\005\005\005\003\003\003\200\200\200\10", "rey0\0 \000\000\000\0", /* Colors starting with 'h' */ "oneydew\0 \203\213\203\301\315\301\340\356\340\360\377\360\360\377\360\4", "otPink\0 \213\072\142\315\140\220\356\152\247\377\156\264\377\151\264\4", /* Colors starting with 'i' */ "ndianRed\0 \213\072\072\315\125\125\356\143\143\377\152\152\315\134\134\4", + "ndigo\0 \113\000\202\0", "vory\0 \213\213\203\315\315\301\356\356\340\377\377\360\377\377\360\4", /* Colors starting with 'j' */ /* Colors starting with 'k' */ @@ -136,11 +140,12 @@ static const elem xColors[] = { "ightSlateGrey\0 \167\210\231\0", "ightSteelBlue\0 \156\173\213\242\265\315\274\322\356\312\341\377\260\304\336\4", "ightYellow\0 \213\213\172\315\315\264\356\356\321\377\377\340\377\377\340\4", + "ime\0 \000\377\000\0", "imeGreen\0 \062\315\062\0", "inen\0 \372\360\346\0", /* Colors starting with 'm' */ "agenta\0 \213\000\213\315\000\315\356\000\356\377\000\377\377\000\377\4", - "aroon\0 \213\034\142\315\051\220\356\060\247\377\064\263\260\060\140\4", + "aroon\0 \213\034\142\315\051\220\356\060\247\377\064\263\200\000\000\4", "ediumAquamarine\0 \146\315\252\0", "ediumBlue\0 \000\000\315\0", "ediumOrchid\0 \172\067\213\264\122\315\321\137\356\340\146\377\272\125\323\4", @@ -160,6 +165,7 @@ static const elem xColors[] = { "avyBlue\0 \000\000\200\0", /* Colors starting with 'o' */ "ldLace\0 \375\365\346\0", + "live\0 \200\200\000\0", "liveDrab\0 \151\213\042\232\315\062\263\356\072\300\377\076\153\216\043\4", "range\0 \213\132\000\315\205\000\356\232\000\377\245\000\377\245\000\4", "rangeRed\0 \213\045\000\315\067\000\356\100\000\377\105\000\377\105\000\4", @@ -175,7 +181,7 @@ static const elem xColors[] = { "ink\0 \213\143\154\315\221\236\356\251\270\377\265\305\377\300\313\4", "lum\0 \213\146\213\315\226\315\356\256\356\377\273\377\335\240\335\4", "owderBlue\0 \260\340\346\0", - "urple\0 \125\032\213\175\046\315\221\054\356\233\060\377\240\040\360\4", + "urple\0 \125\032\213\175\046\315\221\054\356\233\060\377\200\000\200\4", /* Colors starting with 'q' */ /* Colors starting with 'r' */ "ed\0 \213\000\000\315\000\000\356\000\000\377\000\000\377\000\000\4", @@ -188,6 +194,7 @@ static const elem xColors[] = { "eaGreen\0 \056\213\127\103\315\200\116\356\224\124\377\237\056\213\127\4", "eashell\0 \213\206\202\315\305\277\356\345\336\377\365\356\377\365\356\4", "ienna\0 \213\107\046\315\150\071\356\171\102\377\202\107\240\122\055\4", + "ilver\0 \300\300\300\0", "kyBlue\0 \112\160\213\154\246\315\176\300\356\207\316\377\207\316\353\4", "lateBlue\0 \107\074\213\151\131\315\172\147\356\203\157\377\152\132\315\4", "lateGray\0 \154\173\213\237\266\315\271\323\356\306\342\377\160\200\220\4", @@ -197,6 +204,7 @@ static const elem xColors[] = { "teelBlue\0 \066\144\213\117\224\315\134\254\356\143\270\377\106\202\264\4", /* Colors starting with 't' */ "an\0 \213\132\053\315\205\077\356\232\111\377\245\117\322\264\214\4", + "eal\0 \000\200\200\0", "histle\0 \213\173\213\315\265\315\356\322\356\377\341\377\330\277\330\4", "omato\0 \213\066\046\315\117\071\356\134\102\377\143\107\377\143\107\4", "urquoise\0 \000\206\213\000\305\315\000\345\356\000\365\377\100\340\320\4", -- cgit v0.12 From d9ac48147c4cc07f47d581b94c2fd05cfff767a7 Mon Sep 17 00:00:00 2001 From: "jan.nijtmans" Date: Sat, 5 May 2012 16:31:41 +0000 Subject: smaller az table --- xlib/xcolors.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/xlib/xcolors.c b/xlib/xcolors.c index 61a99a4..8942d14 100644 --- a/xlib/xcolors.c +++ b/xlib/xcolors.c @@ -17,8 +17,8 @@ * Index array. For each of the characters 'a'-'y', this table gives the first color * starting with that character in the xColors table. */ -static const int az[] = {0, 5, 13, 21, 45, 46, 50, 60, 62, 65, 66, 67, - 91, 106, 109, 115, 126, 127, 130, 144, 149, 150, 152, 155, 156, 158}; +static const unsigned char az[] = {0, 5, 13, 21, 45, 46, 50, 60, 62, 65, 66, + 67, 91, 106, 109, 115, 126, 127, 130, 144, 149, 150, 152, 155, 156, 158}; /* * Define an array that defines the mapping from color names to RGB values. -- cgit v0.12 From 95c723cdcfe9a574608d9d85288588b9ea982bc9 Mon Sep 17 00:00:00 2001 From: "jan.nijtmans" Date: Mon, 16 Jul 2012 15:17:27 +0000 Subject: better wrapper, with one less roundtrip through X11 server --- generic/tkColor.c | 14 ++++---------- generic/tkInt.h | 2 ++ unix/tkUnixColor.c | 23 +++++++++++++++++++++-- 3 files changed, 27 insertions(+), 12 deletions(-) diff --git a/generic/tkColor.c b/generic/tkColor.c index f1258f5..ea03e28 100644 --- a/generic/tkColor.c +++ b/generic/tkColor.c @@ -832,7 +832,7 @@ TkDebugColor( #undef XParseColor -static CONST char *CONST webColors[] = { +const char *const tkWebColors[20] = { /* 'a' */ "qua\0#0000ffffffff", /* 'b' */ NULL, /* 'c' */ "rimson\0#dcdc14143c3c", @@ -852,13 +852,7 @@ static CONST char *CONST webColors[] = { /* 'q' */ NULL, /* 'r' */ NULL, /* 's' */ "ilver\0#c0c0c0c0c0c0", - /* 't' */ "eal\0#000080808080", - /* 'u' */ NULL, - /* 'v' */ NULL, - /* 'w' */ NULL, - /* 'x' */ NULL, - /* 'y' */ NULL, - /* 'z' */ NULL + /* 't' */ "eal\0#000080808080" }; Status @@ -914,14 +908,14 @@ TkParseColor( name -= 13; } goto done; - } else if (((*name - 'A') & 0xdf) < sizeof(webColors)/sizeof(webColors[0])) { + } else if (((*name - 'A') & 0xdf) < sizeof(tkWebColors)/sizeof(tkWebColors[0])) { if (!((name[0] - 'G') & 0xdf) && !((name[1] - 'R') & 0xdf) && !((name[2] - 'A') & 0xdb) && !((name[3] - 'Y') & 0xdf) && !name[4]) { name = "#808080808080"; goto done; } else { - const char *p = webColors[((*name - 'A') & 0x1f)]; + const char *p = tkWebColors[((*name - 'A') & 0x1f)]; if (p) { const char *q = name; while (!((*p - *(++q)) & 0xdf)) { diff --git a/generic/tkInt.h b/generic/tkInt.h index 88e0c25..01cc9cb 100644 --- a/generic/tkInt.h +++ b/generic/tkInt.h @@ -944,6 +944,8 @@ MODULE_SCOPE TkMainInfo *tkMainWindowList; MODULE_SCOPE Tk_ImageType tkPhotoImageType; MODULE_SCOPE Tcl_HashTable tkPredefBitmapTable; +MODULE_SCOPE const char *const tkWebColors[20]; + /* * The definition of pi, at least from the perspective of double-precision * floats. diff --git a/unix/tkUnixColor.c b/unix/tkUnixColor.c index aa01f24..43500ad 100644 --- a/unix/tkUnixColor.c +++ b/unix/tkUnixColor.c @@ -133,10 +133,28 @@ TkpGetColor( * names. */ - /* TODO: better wrapper for XAllocNamedColor, for now always use TkParseColor */ - if (0 && *name != '#') { + if (*name != '#') { XColor screen; + if (((*name - 'A') & 0xdf) < sizeof(tkWebColors)/sizeof(tkWebColors[0])) { + if (!((name[0] - 'G') & 0xdf) && !((name[1] - 'R') & 0xdf) + && !((name[2] - 'A') & 0xdb) && !((name[3] - 'Y') & 0xdf) + && !name[4]) { + name = "#808080808080"; + goto gotWebColor; + } else { + const char *p = tkWebColors[((*name - 'A') & 0x1f)]; + if (p) { + const char *q = name; + while (!((*p - *(++q)) & 0xdf)) { + if (!*p++) { + name = p; + goto gotWebColor; + } + } + } + } + } if (strlen(name) > 99) { /* Don't bother to parse this. [Bug 2809525]*/ return (TkColor *) NULL; @@ -156,6 +174,7 @@ TkpGetColor( FindClosestColor(tkwin, &screen, &color); } } else { + gotWebColor: if (TkParseColor(display, colormap, name, &color) == 0) { return NULL; } -- cgit v0.12