From 00b961bb5557fade19eac44c9384f626280a1112 Mon Sep 17 00:00:00 2001 From: Ilari Liusvaara Date: Tue, 24 Dec 2013 07:32:27 +0200 Subject: [PATCH] Some refactoring of the named colors stuff (and a lot more colors) --- include/library/framebuffer.hpp | 16 + lua.lyx | 105 ++- lua.pdf | Bin 197007 -> 199102 bytes src/library/Makefile | 5 +- src/library/framebuffer-basecolors.def | 148 ---- .../framebuffer-colors-imagemagick.cpp | 673 ++++++++++++++++++ src/library/framebuffer-colors-opaque.cpp | 17 + .../framebuffer-colors-transparent.cpp | 6 + src/library/framebuffer-colors-w3c.cpp | 152 ++++ src/library/framebuffer.cpp | 38 +- src/library/make-basecolors.lua | 8 - 11 files changed, 961 insertions(+), 207 deletions(-) delete mode 100644 src/library/framebuffer-basecolors.def create mode 100644 src/library/framebuffer-colors-imagemagick.cpp create mode 100644 src/library/framebuffer-colors-opaque.cpp create mode 100644 src/library/framebuffer-colors-transparent.cpp create mode 100644 src/library/framebuffer-colors-w3c.cpp delete mode 100644 src/library/make-basecolors.lua diff --git a/include/library/framebuffer.hpp b/include/library/framebuffer.hpp index abe1271a..87ebab14 100644 --- a/include/library/framebuffer.hpp +++ b/include/library/framebuffer.hpp @@ -2,6 +2,7 @@ #define _library__framebuffer__hpp__included__ #include +#include #include #include #include @@ -486,6 +487,21 @@ struct color } }; +/** + * Base color name. + */ +struct basecolor +{ + basecolor(const std::string& name, int64_t value); +}; + +/** + * Color modifier. + */ +struct color_mod +{ + color_mod(const std::string& name, void(*fn)(int64_t&)); +}; /** * Bitmap font (8x16). diff --git a/lua.lyx b/lua.lyx index 827a742f..58679daa 100644 --- a/lua.lyx +++ b/lua.lyx @@ -783,28 +783,89 @@ Origin of coordinates is at top left corner of game display area. \end_layout \begin_layout Itemize -The following color names are known: aliceblue, antiquewhite, aqua, aquamarine, - azure, beige, bisque, black, blanchedalmond, blue, blueviolet, brown, burlywood -, cadetblue, chartreuse, chocolate, coral, cornflowerblue, cornsilk, crimson, - cyan, darkblue, darkcyan, darkgoldenrod, darkgray, darkgrey, darkgreen, - darkkhaki, darkmagenta, darkolivegreen, darkorange, darkorchid, darkred, - darksalmon, darkseagreen, darkslateblue, darkslategray, darkslategrey, - darkturquoise, darkviolet, deeppink, deepskyblue, dimgray, dimgrey, dodgerblue, - firebrick, floralwhite, forestgreen, fuchsia, gainsboro, ghostwhite, gold, - goldenrod, gray, grey, green, greenyellow, honeydew, hotpink, indianred, - indigo, ivory, khaki, lavender, lavenderblush, lawngreen, lemonchiffon, - lightblue, lightcoral, lightcyan, lightgoldenrodyellow, lightgray, lightgrey, - lightgreen, lightpink, lightsalmon, lightseagreen, lightskyblue, lightslategray -, lightslategrey, lightsteelblue, lightyellow, lime, limegreen, linen, magenta, - maroon, mediumaquamarine, mediumblue, mediumorchid, mediumpurple, mediumseagree -n, mediumslateblue, mediumspringgreen, mediumturquoise, mediumvioletred, - midnightblue, mintcream, mistyrose, moccasin, navajowhite, navy, oldlace, - olive, olivedrab, orange, orangered, orchid, palegoldenrod, palegreen, - paleturquoise, palevioletred, papayawhip, peachpuff, peru, pink, plum, - powderblue, purple, red, rosybrown, royalblue, saddlebrown, salmon, sandybrown, - seagreen, seashell, sienna, silver, skyblue, slateblue, slategray, slategrey, - snow, springgreen, steelblue, tan, teal, thistle, tomato, transparent, - turquoise, violet, wheat, white, whitesmoke, yellow, yellowgreen. +The following color names are known: aliceblue antiquewhite antiquewhite1 + antiquewhite2 antiquewhite3 antiquewhite4 aqua aquamarine aquamarine1 aquamarin +e2 aquamarine3 aquamarine4 azure azure1 azure2 azure3 azure4 beige bisque + bisque1 bisque2 bisque3 bisque4 black blanchedalmond blue blue1 blue2 blue3 + blue4 blueviolet brown brown1 brown2 brown3 brown4 burlywood burlywood1 + burlywood2 burlywood3 burlywood4 cadet cadetblue cadetblue1 cadetblue2 + cadetblue3 cadetblue4 chartreuse chartreuse1 chartreuse2 chartreuse3 chartreuse +4 chocolate chocolate1 chocolate2 chocolate3 chocolate4 coral coral1 coral2 + coral3 coral4 cornflowerblue cornsilk cornsilk1 cornsilk2 cornsilk3 cornsilk4 + crimson cyan cyan1 cyan2 cyan3 cyan4 darkblue darkcyan darkgoldenrod darkgolden +rod1 darkgoldenrod2 darkgoldenrod3 darkgoldenrod4 darkgray darkgreen darkgrey + darkkhaki darkmagenta darkolivegreen darkolivegreen1 darkolivegreen2 darkoliveg +reen3 darkolivegreen4 darkorange darkorange1 darkorange2 darkorange3 darkorange4 + darkorchid darkorchid1 darkorchid2 darkorchid3 darkorchid4 darkred darksalmon + darkseagreen darkseagreen1 darkseagreen2 darkseagreen3 darkseagreen4 darkslateb +lue darkslategray darkslategray1 darkslategray2 darkslategray3 darkslategray4 + darkslategrey darkturquoise darkviolet deeppink deeppink1 deeppink2 deeppink3 + deeppink4 deepskyblue deepskyblue1 deepskyblue2 deepskyblue3 deepskyblue4 + dimgray dimgrey dodgerblue dodgerblue1 dodgerblue2 dodgerblue3 dodgerblue4 + firebrick firebrick1 firebrick2 firebrick3 firebrick4 floralwhite forestgreen + fractal fuchsia gainsboro ghostwhite gold gold1 gold2 gold3 gold4 goldenrod + goldenrod1 goldenrod2 goldenrod3 goldenrod4 gray gray0 gray1 gray10 gray100 + gray11 gray12 gray13 gray14 gray15 gray16 gray17 gray18 gray19 gray2 gray20 + gray21 gray22 gray23 gray24 gray25 gray26 gray27 gray28 gray29 gray3 gray30 + gray31 gray32 gray33 gray34 gray35 gray36 gray37 gray38 gray39 gray4 gray40 + gray41 gray42 gray43 gray44 gray45 gray46 gray47 gray48 gray49 gray5 gray50 + gray51 gray52 gray53 gray54 gray55 gray56 gray57 gray58 gray59 gray6 gray60 + gray61 gray62 gray63 gray64 gray65 gray66 gray67 gray68 gray69 gray7 gray70 + gray71 gray72 gray73 gray74 gray75 gray76 gray77 gray78 gray79 gray8 gray80 + gray81 gray82 gray83 gray84 gray85 gray86 gray87 gray88 gray89 gray9 gray90 + gray91 gray92 gray93 gray94 gray95 gray96 gray97 gray98 gray99 green green1 + green2 green3 green4 greenyellow grey grey0 grey1 grey10 grey100 grey11 + grey12 grey13 grey14 grey15 grey16 grey17 grey18 grey19 grey2 grey20 grey21 + grey22 grey23 grey24 grey25 grey26 grey27 grey28 grey29 grey3 grey30 grey31 + grey32 grey33 grey34 grey35 grey36 grey37 grey38 grey39 grey4 grey40 grey41 + grey42 grey43 grey44 grey45 grey46 grey47 grey48 grey49 grey5 grey50 grey51 + grey52 grey53 grey54 grey55 grey56 grey57 grey58 grey59 grey6 grey60 grey61 + grey62 grey63 grey64 grey65 grey66 grey67 grey68 grey69 grey7 grey70 grey71 + grey72 grey73 grey74 grey75 grey76 grey77 grey78 grey79 grey8 grey80 grey81 + grey82 grey83 grey84 grey85 grey86 grey87 grey88 grey89 grey9 grey90 grey91 + grey92 grey93 grey94 grey95 grey96 grey97 grey98 grey99 honeydew honeydew1 + honeydew2 honeydew3 honeydew4 hotpink hotpink1 hotpink2 hotpink3 hotpink4 + indianred indianred1 indianred2 indianred3 indianred4 indigo ivory ivory1 + ivory2 ivory3 ivory4 khaki khaki1 khaki2 khaki3 khaki4 lavender lavenderblush + lavenderblush1 lavenderblush2 lavenderblush3 lavenderblush4 lawngreen lemonchif +fon lemonchiffon1 lemonchiffon2 lemonchiffon3 lemonchiffon4 lightblue lightblue1 + lightblue2 lightblue3 lightblue4 lightcoral lightcyan lightcyan1 lightcyan2 + lightcyan3 lightcyan4 lightgoldenrod lightgoldenrod1 lightgoldenrod2 lightgolde +nrod3 lightgoldenrod4 lightgoldenrodyellow lightgray lightgreen lightgrey + lightpink lightpink1 lightpink2 lightpink3 lightpink4 lightsalmon lightsalmon1 + lightsalmon2 lightsalmon3 lightsalmon4 lightseagreen lightskyblue lightskyblue1 + lightskyblue2 lightskyblue3 lightskyblue4 lightslateblue lightslategray + lightslategrey lightsteelblue lightsteelblue1 lightsteelblue2 lightsteelblue3 + lightsteelblue4 lightyellow lightyellow1 lightyellow2 lightyellow3 lightyellow4 + lime limegreen linen magenta magenta1 magenta2 magenta3 magenta4 maroon + maroon1 maroon2 maroon3 maroon4 mediumaquamarine mediumblue mediumforestgreen + mediumgoldenrod mediumorchid mediumorchid1 mediumorchid2 mediumorchid3 + mediumorchid4 mediumpurple mediumpurple1 mediumpurple2 mediumpurple3 mediumpurp +le4 mediumseagreen mediumslateblue mediumspringgreen mediumturquoise mediumviole +tred midnightblue mintcream mistyrose mistyrose1 mistyrose2 mistyrose3 mistyrose +4 moccasin navajowhite navajowhite1 navajowhite2 navajowhite3 navajowhite4 + navy navyblue oldlace olive olivedrab olivedrab1 olivedrab2 olivedrab3 + olivedrab4 orange orange1 orange2 orange3 orange4 orangered orangered1 + orangered2 orangered3 orangered4 orchid orchid1 orchid2 orchid3 orchid4 + palegoldenrod palegreen palegreen1 palegreen2 palegreen3 palegreen4 paleturquoi +se paleturquoise1 paleturquoise2 paleturquoise3 paleturquoise4 palevioletred + palevioletred1 palevioletred2 palevioletred3 palevioletred4 papayawhip + peachpuff peachpuff1 peachpuff2 peachpuff3 peachpuff4 peru pink pink1 pink2 + pink3 pink4 plum plum1 plum2 plum3 plum4 powderblue purple purple1 purple2 + purple3 purple4 red red1 red2 red3 red4 rosybrown rosybrown1 rosybrown2 + rosybrown3 rosybrown4 royalblue royalblue1 royalblue2 royalblue3 royalblue4 + saddlebrown salmon salmon1 salmon2 salmon3 salmon4 sandybrown seagreen + seagreen1 seagreen2 seagreen3 seagreen4 seashell seashell1 seashell2 seashell3 + seashell4 sienna sienna1 sienna2 sienna3 sienna4 silver skyblue skyblue1 + skyblue2 skyblue3 skyblue4 slateblue slateblue1 slateblue2 slateblue3 slateblue +4 slategray slategray1 slategray2 slategray3 slategray4 slategrey snow snow1 + snow2 snow3 snow4 springgreen springgreen1 springgreen2 springgreen3 springgree +n4 steelblue steelblue1 steelblue2 steelblue3 steelblue4 tan tan1 tan2 tan3 + tan4 teal thistle thistle1 thistle2 thistle3 thistle4 tomato tomato1 tomato2 + tomato3 tomato4 transparent turquoise turquoise1 turquoise2 turquoise3 + turquoise4 violet violetred violetred1 violetred2 violetred3 violetred4 + wheat wheat1 wheat2 wheat3 wheat4 white whitesmoke yellow yellow1 yellow2 + yellow3 yellow4 yellowgreen . \end_layout \begin_layout Itemize diff --git a/lua.pdf b/lua.pdf index 88a6214d4e801814b605b7f83e8b0fabb41994db..44130018052808a8bf959c517dfbbac0333faa75 100644 GIT binary patch delta 21863 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 YQ6hZ(#PG&?czt~_HMOI*RuHlO0wS#5qyPW_ diff --git a/src/library/Makefile b/src/library/Makefile index 20155e31..9fbedfc6 100644 --- a/src/library/Makefile +++ b/src/library/Makefile @@ -6,13 +6,10 @@ __all__.files: $(OBJECTS) lua ../genfilelist.lua $^ >$@ touch __all__.ldflags -framebuffer-basecolors.inc: framebuffer-basecolors.def - lua make-basecolors.lua <$< >$@ - %.$(OBJECT_SUFFIX): %.cpp %.cpp.dep $(REALCC) $(CFLAGS) -c -o $@ $< -I../../include/library -precheck: forcelook framebuffer-basecolors.inc +precheck: forcelook ../../buildaux/mkdeps.exe ../../include/library -- *.cpp @true diff --git a/src/library/framebuffer-basecolors.def b/src/library/framebuffer-basecolors.def deleted file mode 100644 index 7b2095a1..00000000 --- a/src/library/framebuffer-basecolors.def +++ /dev/null @@ -1,148 +0,0 @@ -W3C color names -#f0f8ff aliceblue -#faebd7 antiquewhite -#00ffff aqua -#7fffd4 aquamarine -#f0ffff azure -#f5f5dc beige -#ffe4c4 bisque -#000000 black -#ffebcd blanchedalmond -#0000ff blue -#8a2be2 blueviolet -#a52a2a brown -#deb887 burlywood -#5f9ea0 cadetblue -#7fff00 chartreuse -#d2691e chocolate -#ff7f50 coral -#6495ed cornflowerblue -#fff8dc cornsilk -#dc143c crimson -#00ffff cyan -#00008b darkblue -#008b8b darkcyan -#b8860b darkgoldenrod -#a9a9a9 darkgray -#a9a9a9 darkgrey -#006400 darkgreen -#bdb76b darkkhaki -#8b008b darkmagenta -#556b2f darkolivegreen -#ff8c00 darkorange -#9932cc darkorchid -#8b0000 darkred -#e9967a darksalmon -#8fbc8f darkseagreen -#483d8b darkslateblue -#2f4f4f darkslategray -#2f4f4f darkslategrey -#00ced1 darkturquoise -#9400d3 darkviolet -#ff1493 deeppink -#00bfff deepskyblue -#696969 dimgray -#696969 dimgrey -#1e90ff dodgerblue -#b22222 firebrick -#fffaf0 floralwhite -#228b22 forestgreen -#ff00ff fuchsia -#dcdcdc gainsboro -#f8f8ff ghostwhite -#ffd700 gold -#daa520 goldenrod -#808080 gray -#808080 grey -#008000 green -#adff2f greenyellow -#f0fff0 honeydew -#ff69b4 hotpink -#cd5c5c indianred -#4b0082 indigo -#fffff0 ivory -#f0e68c khaki -#e6e6fa lavender -#fff0f5 lavenderblush -#7cfc00 lawngreen -#fffacd lemonchiffon -#add8e6 lightblue -#f08080 lightcoral -#e0ffff lightcyan -#fafad2 lightgoldenrodyellow -#d3d3d3 lightgray -#d3d3d3 lightgrey -#90ee90 lightgreen -#ffb6c1 lightpink -#ffa07a lightsalmon -#20b2aa lightseagreen -#87cefa lightskyblue -#778899 lightslategray -#778899 lightslategrey -#b0c4de lightsteelblue -#ffffe0 lightyellow -#00ff00 lime -#32cd32 limegreen -#faf0e6 linen -#ff00ff magenta -#800000 maroon -#66cdaa mediumaquamarine -#0000cd mediumblue -#ba55d3 mediumorchid -#9370db mediumpurple -#3cb371 mediumseagreen -#7b68ee mediumslateblue -#00fa9a mediumspringgreen -#48d1cc mediumturquoise -#c71585 mediumvioletred -#191970 midnightblue -#f5fffa mintcream -#ffe4e1 mistyrose -#ffe4b5 moccasin -#ffdead navajowhite -#000080 navy -#fdf5e6 oldlace -#808000 olive -#6b8e23 olivedrab -#ffa500 orange -#ff4500 orangered -#da70d6 orchid -#eee8aa palegoldenrod -#98fb98 palegreen -#afeeee paleturquoise -#db7093 palevioletred -#ffefd5 papayawhip -#ffdab9 peachpuff -#cd853f peru -#ffc0cb pink -#dda0dd plum -#b0e0e6 powderblue -#800080 purple -#ff0000 red -#bc8f8f rosybrown -#4169e1 royalblue -#8b4513 saddlebrown -#fa8072 salmon -#f4a460 sandybrown -#2e8b57 seagreen -#fff5ee seashell -#a0522d sienna -#c0c0c0 silver -#87ceeb skyblue -#6a5acd slateblue -#708090 slategray -#708090 slategrey -#fffafa snow -#00ff7f springgreen -#4682b4 steelblue -#d2b48c tan -#008080 teal -#d8bfd8 thistle -#ff6347 tomato -#40e0d0 turquoise -#ee82ee violet -#f5deb3 wheat -#ffffff white -#f5f5f5 whitesmoke -#ffff00 yellow -#9acd32 yellowgreen diff --git a/src/library/framebuffer-colors-imagemagick.cpp b/src/library/framebuffer-colors-imagemagick.cpp new file mode 100644 index 00000000..5ae83715 --- /dev/null +++ b/src/library/framebuffer-colors-imagemagick.cpp @@ -0,0 +1,673 @@ +#include "framebuffer.hpp" + +namespace +{ + framebuffer::basecolor snow("snow", 0xfffafa); + framebuffer::basecolor snow1("snow1", 0xfffafa); + framebuffer::basecolor snow2("snow2", 0xeee9e9); + framebuffer::basecolor rosybrown1("rosybrown1", 0xffc1c1); + framebuffer::basecolor rosybrown2("rosybrown2", 0xeeb4b4); + framebuffer::basecolor snow3("snow3", 0xcdc9c9); + framebuffer::basecolor lightcoral("lightcoral", 0xf08080); + framebuffer::basecolor indianred1("indianred1", 0xff6a6a); + framebuffer::basecolor rosybrown3("rosybrown3", 0xcd9b9b); + framebuffer::basecolor indianred2("indianred2", 0xee6363); + framebuffer::basecolor rosybrown("rosybrown", 0xbc8f8f); + framebuffer::basecolor brown1("brown1", 0xff4040); + framebuffer::basecolor firebrick1("firebrick1", 0xff3030); + framebuffer::basecolor brown2("brown2", 0xee3b3b); + framebuffer::basecolor indianred("indianred", 0xcd5c5c); + framebuffer::basecolor indianred3("indianred3", 0xcd5555); + framebuffer::basecolor firebrick2("firebrick2", 0xee2c2c); + framebuffer::basecolor snow4("snow4", 0x8b8989); + framebuffer::basecolor brown3("brown3", 0xcd3333); + framebuffer::basecolor red("red", 0xff0000); + framebuffer::basecolor red1("red1", 0xff0000); + framebuffer::basecolor rosybrown4("rosybrown4", 0x8b6969); + framebuffer::basecolor firebrick3("firebrick3", 0xcd2626); + framebuffer::basecolor red2("red2", 0xee0000); + framebuffer::basecolor firebrick("firebrick", 0xb22222); + framebuffer::basecolor brown("brown", 0xa52a2a); + framebuffer::basecolor red3("red3", 0xcd0000); + framebuffer::basecolor indianred4("indianred4", 0x8b3a3a); + framebuffer::basecolor brown4("brown4", 0x8b2323); + framebuffer::basecolor firebrick4("firebrick4", 0x8b1a1a); + framebuffer::basecolor darkred("darkred", 0x8b0000); + framebuffer::basecolor red4("red4", 0x8b0000); + framebuffer::basecolor lightpink1("lightpink1", 0xffaeb9); + framebuffer::basecolor lightpink3("lightpink3", 0xcd8c95); + framebuffer::basecolor lightpink4("lightpink4", 0x8b5f65); + framebuffer::basecolor lightpink2("lightpink2", 0xeea2ad); + framebuffer::basecolor lightpink("lightpink", 0xffb6c1); + framebuffer::basecolor pink("pink", 0xffc0cb); + framebuffer::basecolor crimson("crimson", 0xdc143c); + framebuffer::basecolor pink1("pink1", 0xffb5c5); + framebuffer::basecolor pink2("pink2", 0xeea9b8); + framebuffer::basecolor pink3("pink3", 0xcd919e); + framebuffer::basecolor pink4("pink4", 0x8b636c); + framebuffer::basecolor palevioletred4("palevioletred4", 0x8b475d); + framebuffer::basecolor palevioletred("palevioletred", 0xdb7093); + framebuffer::basecolor palevioletred2("palevioletred2", 0xee799f); + framebuffer::basecolor palevioletred1("palevioletred1", 0xff82ab); + framebuffer::basecolor palevioletred3("palevioletred3", 0xcd6889); + framebuffer::basecolor lavenderblush("lavenderblush", 0xfff0f5); + framebuffer::basecolor lavenderblush1("lavenderblush1", 0xfff0f5); + framebuffer::basecolor lavenderblush3("lavenderblush3", 0xcdc1c5); + framebuffer::basecolor lavenderblush2("lavenderblush2", 0xeee0e5); + framebuffer::basecolor lavenderblush4("lavenderblush4", 0x8b8386); + framebuffer::basecolor maroon("maroon", 0xb03060); + framebuffer::basecolor hotpink3("hotpink3", 0xcd6090); + framebuffer::basecolor violetred3("violetred3", 0xcd3278); + framebuffer::basecolor violetred1("violetred1", 0xff3e96); + framebuffer::basecolor violetred2("violetred2", 0xee3a8c); + framebuffer::basecolor violetred4("violetred4", 0x8b2252); + framebuffer::basecolor hotpink2("hotpink2", 0xee6aa7); + framebuffer::basecolor hotpink1("hotpink1", 0xff6eb4); + framebuffer::basecolor hotpink4("hotpink4", 0x8b3a62); + framebuffer::basecolor hotpink("hotpink", 0xff69b4); + framebuffer::basecolor deeppink("deeppink", 0xff1493); + framebuffer::basecolor deeppink1("deeppink1", 0xff1493); + framebuffer::basecolor deeppink2("deeppink2", 0xee1289); + framebuffer::basecolor deeppink3("deeppink3", 0xcd1076); + framebuffer::basecolor deeppink4("deeppink4", 0x8b0a50); + framebuffer::basecolor maroon1("maroon1", 0xff34b3); + framebuffer::basecolor maroon2("maroon2", 0xee30a7); + framebuffer::basecolor maroon3("maroon3", 0xcd2990); + framebuffer::basecolor maroon4("maroon4", 0x8b1c62); + framebuffer::basecolor mediumvioletred("mediumvioletred", 0xc71585); + framebuffer::basecolor violetred("violetred", 0xd02090); + framebuffer::basecolor orchid2("orchid2", 0xee7ae9); + framebuffer::basecolor orchid("orchid", 0xda70d6); + framebuffer::basecolor orchid1("orchid1", 0xff83fa); + framebuffer::basecolor orchid3("orchid3", 0xcd69c9); + framebuffer::basecolor orchid4("orchid4", 0x8b4789); + framebuffer::basecolor thistle1("thistle1", 0xffe1ff); + framebuffer::basecolor thistle2("thistle2", 0xeed2ee); + framebuffer::basecolor plum1("plum1", 0xffbbff); + framebuffer::basecolor plum2("plum2", 0xeeaeee); + framebuffer::basecolor thistle("thistle", 0xd8bfd8); + framebuffer::basecolor thistle3("thistle3", 0xcdb5cd); + framebuffer::basecolor plum("plum", 0xdda0dd); + framebuffer::basecolor violet("violet", 0xee82ee); + framebuffer::basecolor plum3("plum3", 0xcd96cd); + framebuffer::basecolor thistle4("thistle4", 0x8b7b8b); + framebuffer::basecolor fuchsia("fuchsia", 0xff00ff); + framebuffer::basecolor magenta("magenta", 0xff00ff); + framebuffer::basecolor magenta1("magenta1", 0xff00ff); + framebuffer::basecolor plum4("plum4", 0x8b668b); + framebuffer::basecolor magenta2("magenta2", 0xee00ee); + framebuffer::basecolor magenta3("magenta3", 0xcd00cd); + framebuffer::basecolor darkmagenta("darkmagenta", 0x8b008b); + framebuffer::basecolor magenta4("magenta4", 0x8b008b); + framebuffer::basecolor mediumorchid("mediumorchid", 0xba55d3); + framebuffer::basecolor mediumorchid1("mediumorchid1", 0xe066ff); + framebuffer::basecolor mediumorchid2("mediumorchid2", 0xd15fee); + framebuffer::basecolor mediumorchid3("mediumorchid3", 0xb452cd); + framebuffer::basecolor mediumorchid4("mediumorchid4", 0x7a378b); + framebuffer::basecolor darkviolet("darkviolet", 0x9400d3); + framebuffer::basecolor darkorchid("darkorchid", 0x9932cc); + framebuffer::basecolor darkorchid1("darkorchid1", 0xbf3eff); + framebuffer::basecolor darkorchid3("darkorchid3", 0x9a32cd); + framebuffer::basecolor darkorchid2("darkorchid2", 0xb23aee); + framebuffer::basecolor darkorchid4("darkorchid4", 0x68228b); + framebuffer::basecolor purple("purple", 0xa020f0); + framebuffer::basecolor indigo("indigo", 0x4b0082); + framebuffer::basecolor blueviolet("blueviolet", 0x8a2be2); + framebuffer::basecolor purple2("purple2", 0x912cee); + framebuffer::basecolor purple3("purple3", 0x7d26cd); + framebuffer::basecolor purple4("purple4", 0x551a8b); + framebuffer::basecolor purple1("purple1", 0x9b30ff); + framebuffer::basecolor mediumpurple("mediumpurple", 0x9370db); + framebuffer::basecolor mediumpurple1("mediumpurple1", 0xab82ff); + framebuffer::basecolor mediumpurple2("mediumpurple2", 0x9f79ee); + framebuffer::basecolor mediumpurple3("mediumpurple3", 0x8968cd); + framebuffer::basecolor mediumpurple4("mediumpurple4", 0x5d478b); + framebuffer::basecolor darkslateblue("darkslateblue", 0x483d8b); + framebuffer::basecolor lightslateblue("lightslateblue", 0x8470ff); + framebuffer::basecolor mediumslateblue("mediumslateblue", 0x7b68ee); + framebuffer::basecolor slateblue("slateblue", 0x6a5acd); + framebuffer::basecolor slateblue1("slateblue1", 0x836fff); + framebuffer::basecolor slateblue2("slateblue2", 0x7a67ee); + framebuffer::basecolor slateblue3("slateblue3", 0x6959cd); + framebuffer::basecolor slateblue4("slateblue4", 0x473c8b); + framebuffer::basecolor ghostwhite("ghostwhite", 0xf8f8ff); + framebuffer::basecolor lavender("lavender", 0xe6e6fa); + framebuffer::basecolor blue("blue", 0x0000ff); + framebuffer::basecolor blue1("blue1", 0x0000ff); + framebuffer::basecolor blue2("blue2", 0x0000ee); + framebuffer::basecolor blue3("blue3", 0x0000cd); + framebuffer::basecolor mediumblue("mediumblue", 0x0000cd); + framebuffer::basecolor blue4("blue4", 0x00008b); + framebuffer::basecolor darkblue("darkblue", 0x00008b); + framebuffer::basecolor midnightblue("midnightblue", 0x191970); + framebuffer::basecolor navy("navy", 0x000080); + framebuffer::basecolor navyblue("navyblue", 0x000080); + framebuffer::basecolor royalblue("royalblue", 0x4169e1); + framebuffer::basecolor royalblue1("royalblue1", 0x4876ff); + framebuffer::basecolor royalblue2("royalblue2", 0x436eee); + framebuffer::basecolor royalblue3("royalblue3", 0x3a5fcd); + framebuffer::basecolor royalblue4("royalblue4", 0x27408b); + framebuffer::basecolor cornflowerblue("cornflowerblue", 0x6495ed); + framebuffer::basecolor lightsteelblue("lightsteelblue", 0xb0c4de); + framebuffer::basecolor lightsteelblue1("lightsteelblue1", 0xcae1ff); + framebuffer::basecolor lightsteelblue2("lightsteelblue2", 0xbcd2ee); + framebuffer::basecolor lightsteelblue3("lightsteelblue3", 0xa2b5cd); + framebuffer::basecolor lightsteelblue4("lightsteelblue4", 0x6e7b8b); + framebuffer::basecolor slategray4("slategray4", 0x6c7b8b); + framebuffer::basecolor slategray1("slategray1", 0xc6e2ff); + framebuffer::basecolor slategray2("slategray2", 0xb9d3ee); + framebuffer::basecolor slategray3("slategray3", 0x9fb6cd); + framebuffer::basecolor lightslategray("lightslategray", 0x778899); + framebuffer::basecolor lightslategrey("lightslategrey", 0x778899); + framebuffer::basecolor slategray("slategray", 0x708090); + framebuffer::basecolor slategrey("slategrey", 0x708090); + framebuffer::basecolor dodgerblue("dodgerblue", 0x1e90ff); + framebuffer::basecolor dodgerblue1("dodgerblue1", 0x1e90ff); + framebuffer::basecolor dodgerblue2("dodgerblue2", 0x1c86ee); + framebuffer::basecolor dodgerblue4("dodgerblue4", 0x104e8b); + framebuffer::basecolor dodgerblue3("dodgerblue3", 0x1874cd); + framebuffer::basecolor aliceblue("aliceblue", 0xf0f8ff); + framebuffer::basecolor steelblue4("steelblue4", 0x36648b); + framebuffer::basecolor steelblue("steelblue", 0x4682b4); + framebuffer::basecolor steelblue1("steelblue1", 0x63b8ff); + framebuffer::basecolor steelblue2("steelblue2", 0x5cacee); + framebuffer::basecolor steelblue3("steelblue3", 0x4f94cd); + framebuffer::basecolor skyblue4("skyblue4", 0x4a708b); + framebuffer::basecolor skyblue1("skyblue1", 0x87ceff); + framebuffer::basecolor skyblue2("skyblue2", 0x7ec0ee); + framebuffer::basecolor skyblue3("skyblue3", 0x6ca6cd); + framebuffer::basecolor lightskyblue("lightskyblue", 0x87cefa); + framebuffer::basecolor lightskyblue4("lightskyblue4", 0x607b8b); + framebuffer::basecolor lightskyblue1("lightskyblue1", 0xb0e2ff); + framebuffer::basecolor lightskyblue2("lightskyblue2", 0xa4d3ee); + framebuffer::basecolor lightskyblue3("lightskyblue3", 0x8db6cd); + framebuffer::basecolor skyblue("skyblue", 0x87ceeb); + framebuffer::basecolor lightblue3("lightblue3", 0x9ac0cd); + framebuffer::basecolor deepskyblue("deepskyblue", 0x00bfff); + framebuffer::basecolor deepskyblue1("deepskyblue1", 0x00bfff); + framebuffer::basecolor deepskyblue2("deepskyblue2", 0x00b2ee); + framebuffer::basecolor deepskyblue4("deepskyblue4", 0x00688b); + framebuffer::basecolor deepskyblue3("deepskyblue3", 0x009acd); + framebuffer::basecolor lightblue1("lightblue1", 0xbfefff); + framebuffer::basecolor lightblue2("lightblue2", 0xb2dfee); + framebuffer::basecolor lightblue("lightblue", 0xadd8e6); + framebuffer::basecolor lightblue4("lightblue4", 0x68838b); + framebuffer::basecolor powderblue("powderblue", 0xb0e0e6); + framebuffer::basecolor cadetblue1("cadetblue1", 0x98f5ff); + framebuffer::basecolor cadetblue2("cadetblue2", 0x8ee5ee); + framebuffer::basecolor cadetblue3("cadetblue3", 0x7ac5cd); + framebuffer::basecolor cadetblue4("cadetblue4", 0x53868b); + framebuffer::basecolor turquoise1("turquoise1", 0x00f5ff); + framebuffer::basecolor turquoise2("turquoise2", 0x00e5ee); + framebuffer::basecolor turquoise3("turquoise3", 0x00c5cd); + framebuffer::basecolor turquoise4("turquoise4", 0x00868b); + framebuffer::basecolor cadet("cadet", 0x5f9ea0); + framebuffer::basecolor cadetblue("cadetblue", 0x5f9ea0); + framebuffer::basecolor darkturquoise("darkturquoise", 0x00ced1); + framebuffer::basecolor azure("azure", 0xf0ffff); + framebuffer::basecolor azure1("azure1", 0xf0ffff); + framebuffer::basecolor lightcyan("lightcyan", 0xe0ffff); + framebuffer::basecolor lightcyan1("lightcyan1", 0xe0ffff); + framebuffer::basecolor azure2("azure2", 0xe0eeee); + framebuffer::basecolor lightcyan2("lightcyan2", 0xd1eeee); + framebuffer::basecolor paleturquoise1("paleturquoise1", 0xbbffff); + framebuffer::basecolor paleturquoise("paleturquoise", 0xafeeee); + framebuffer::basecolor paleturquoise2("paleturquoise2", 0xaeeeee); + framebuffer::basecolor darkslategray1("darkslategray1", 0x97ffff); + framebuffer::basecolor azure3("azure3", 0xc1cdcd); + framebuffer::basecolor lightcyan3("lightcyan3", 0xb4cdcd); + framebuffer::basecolor darkslategray2("darkslategray2", 0x8deeee); + framebuffer::basecolor paleturquoise3("paleturquoise3", 0x96cdcd); + framebuffer::basecolor darkslategray3("darkslategray3", 0x79cdcd); + framebuffer::basecolor azure4("azure4", 0x838b8b); + framebuffer::basecolor lightcyan4("lightcyan4", 0x7a8b8b); + framebuffer::basecolor aqua("aqua", 0x00ffff); + framebuffer::basecolor cyan("cyan", 0x00ffff); + framebuffer::basecolor cyan1("cyan1", 0x00ffff); + framebuffer::basecolor paleturquoise4("paleturquoise4", 0x668b8b); + framebuffer::basecolor cyan2("cyan2", 0x00eeee); + framebuffer::basecolor darkslategray4("darkslategray4", 0x528b8b); + framebuffer::basecolor cyan3("cyan3", 0x00cdcd); + framebuffer::basecolor cyan4("cyan4", 0x008b8b); + framebuffer::basecolor darkcyan("darkcyan", 0x008b8b); + framebuffer::basecolor teal("teal", 0x008080); + framebuffer::basecolor darkslategray("darkslategray", 0x2f4f4f); + framebuffer::basecolor darkslategrey("darkslategrey", 0x2f4f4f); + framebuffer::basecolor mediumturquoise("mediumturquoise", 0x48d1cc); + framebuffer::basecolor lightseagreen("lightseagreen", 0x20b2aa); + framebuffer::basecolor turquoise("turquoise", 0x40e0d0); + framebuffer::basecolor aquamarine4("aquamarine4", 0x458b74); + framebuffer::basecolor aquamarine("aquamarine", 0x7fffd4); + framebuffer::basecolor aquamarine1("aquamarine1", 0x7fffd4); + framebuffer::basecolor aquamarine2("aquamarine2", 0x76eec6); + framebuffer::basecolor aquamarine3("aquamarine3", 0x66cdaa); + framebuffer::basecolor mediumaquamarine("mediumaquamarine", 0x66cdaa); + framebuffer::basecolor mediumspringgreen("mediumspringgreen", 0x00fa9a); + framebuffer::basecolor mintcream("mintcream", 0xf5fffa); + framebuffer::basecolor springgreen("springgreen", 0x00ff7f); + framebuffer::basecolor springgreen1("springgreen1", 0x00ff7f); + framebuffer::basecolor springgreen2("springgreen2", 0x00ee76); + framebuffer::basecolor springgreen3("springgreen3", 0x00cd66); + framebuffer::basecolor springgreen4("springgreen4", 0x008b45); + framebuffer::basecolor mediumseagreen("mediumseagreen", 0x3cb371); + framebuffer::basecolor seagreen("seagreen", 0x2e8b57); + framebuffer::basecolor seagreen3("seagreen3", 0x43cd80); + framebuffer::basecolor seagreen1("seagreen1", 0x54ff9f); + framebuffer::basecolor seagreen4("seagreen4", 0x2e8b57); + framebuffer::basecolor seagreen2("seagreen2", 0x4eee94); + framebuffer::basecolor mediumforestgreen("mediumforestgreen", 0x32814b); + framebuffer::basecolor honeydew("honeydew", 0xf0fff0); + framebuffer::basecolor honeydew1("honeydew1", 0xf0fff0); + framebuffer::basecolor honeydew2("honeydew2", 0xe0eee0); + framebuffer::basecolor darkseagreen1("darkseagreen1", 0xc1ffc1); + framebuffer::basecolor darkseagreen2("darkseagreen2", 0xb4eeb4); + framebuffer::basecolor palegreen1("palegreen1", 0x9aff9a); + framebuffer::basecolor palegreen("palegreen", 0x98fb98); + framebuffer::basecolor honeydew3("honeydew3", 0xc1cdc1); + framebuffer::basecolor lightgreen("lightgreen", 0x90ee90); + framebuffer::basecolor palegreen2("palegreen2", 0x90ee90); + framebuffer::basecolor darkseagreen3("darkseagreen3", 0x9bcd9b); + framebuffer::basecolor darkseagreen("darkseagreen", 0x8fbc8f); + framebuffer::basecolor palegreen3("palegreen3", 0x7ccd7c); + framebuffer::basecolor honeydew4("honeydew4", 0x838b83); + framebuffer::basecolor green1("green1", 0x00ff00); + framebuffer::basecolor lime("lime", 0x00ff00); + framebuffer::basecolor limegreen("limegreen", 0x32cd32); + framebuffer::basecolor darkseagreen4("darkseagreen4", 0x698b69); + framebuffer::basecolor green2("green2", 0x00ee00); + framebuffer::basecolor palegreen4("palegreen4", 0x548b54); + framebuffer::basecolor green3("green3", 0x00cd00); + framebuffer::basecolor forestgreen("forestgreen", 0x228b22); + framebuffer::basecolor green4("green4", 0x008b00); + framebuffer::basecolor green("green", 0x008000); + framebuffer::basecolor darkgreen("darkgreen", 0x006400); + framebuffer::basecolor lawngreen("lawngreen", 0x7cfc00); + framebuffer::basecolor chartreuse("chartreuse", 0x7fff00); + framebuffer::basecolor chartreuse1("chartreuse1", 0x7fff00); + framebuffer::basecolor chartreuse2("chartreuse2", 0x76ee00); + framebuffer::basecolor chartreuse3("chartreuse3", 0x66cd00); + framebuffer::basecolor chartreuse4("chartreuse4", 0x458b00); + framebuffer::basecolor greenyellow("greenyellow", 0xadff2f); + framebuffer::basecolor darkolivegreen3("darkolivegreen3", 0xa2cd5a); + framebuffer::basecolor darkolivegreen1("darkolivegreen1", 0xcaff70); + framebuffer::basecolor darkolivegreen2("darkolivegreen2", 0xbcee68); + framebuffer::basecolor darkolivegreen4("darkolivegreen4", 0x6e8b3d); + framebuffer::basecolor darkolivegreen("darkolivegreen", 0x556b2f); + framebuffer::basecolor olivedrab("olivedrab", 0x6b8e23); + framebuffer::basecolor olivedrab1("olivedrab1", 0xc0ff3e); + framebuffer::basecolor olivedrab2("olivedrab2", 0xb3ee3a); + framebuffer::basecolor olivedrab3("olivedrab3", 0x9acd32); + framebuffer::basecolor yellowgreen("yellowgreen", 0x9acd32); + framebuffer::basecolor olivedrab4("olivedrab4", 0x698b22); + framebuffer::basecolor ivory("ivory", 0xfffff0); + framebuffer::basecolor ivory1("ivory1", 0xfffff0); + framebuffer::basecolor lightyellow("lightyellow", 0xffffe0); + framebuffer::basecolor lightyellow1("lightyellow1", 0xffffe0); + framebuffer::basecolor beige("beige", 0xf5f5dc); + framebuffer::basecolor ivory2("ivory2", 0xeeeee0); + framebuffer::basecolor lightgoldenrodyellow("lightgoldenrodyellow", 0xfafad2); + framebuffer::basecolor lightyellow2("lightyellow2", 0xeeeed1); + framebuffer::basecolor ivory3("ivory3", 0xcdcdc1); + framebuffer::basecolor lightyellow3("lightyellow3", 0xcdcdb4); + framebuffer::basecolor ivory4("ivory4", 0x8b8b83); + framebuffer::basecolor lightyellow4("lightyellow4", 0x8b8b7a); + framebuffer::basecolor yellow("yellow", 0xffff00); + framebuffer::basecolor yellow1("yellow1", 0xffff00); + framebuffer::basecolor yellow2("yellow2", 0xeeee00); + framebuffer::basecolor yellow3("yellow3", 0xcdcd00); + framebuffer::basecolor yellow4("yellow4", 0x8b8b00); + framebuffer::basecolor olive("olive", 0x808000); + framebuffer::basecolor darkkhaki("darkkhaki", 0xbdb76b); + framebuffer::basecolor khaki2("khaki2", 0xeee685); + framebuffer::basecolor lemonchiffon4("lemonchiffon4", 0x8b8970); + framebuffer::basecolor khaki1("khaki1", 0xfff68f); + framebuffer::basecolor khaki3("khaki3", 0xcdc673); + framebuffer::basecolor khaki4("khaki4", 0x8b864e); + framebuffer::basecolor palegoldenrod("palegoldenrod", 0xeee8aa); + framebuffer::basecolor lemonchiffon("lemonchiffon", 0xfffacd); + framebuffer::basecolor lemonchiffon1("lemonchiffon1", 0xfffacd); + framebuffer::basecolor khaki("khaki", 0xf0e68c); + framebuffer::basecolor lemonchiffon3("lemonchiffon3", 0xcdc9a5); + framebuffer::basecolor lemonchiffon2("lemonchiffon2", 0xeee9bf); + framebuffer::basecolor mediumgoldenrod("mediumgoldenrod", 0xd1c166); + framebuffer::basecolor cornsilk4("cornsilk4", 0x8b8878); + framebuffer::basecolor gold("gold", 0xffd700); + framebuffer::basecolor gold1("gold1", 0xffd700); + framebuffer::basecolor gold2("gold2", 0xeec900); + framebuffer::basecolor gold3("gold3", 0xcdad00); + framebuffer::basecolor gold4("gold4", 0x8b7500); + framebuffer::basecolor lightgoldenrod("lightgoldenrod", 0xeedd82); + framebuffer::basecolor lightgoldenrod4("lightgoldenrod4", 0x8b814c); + framebuffer::basecolor lightgoldenrod1("lightgoldenrod1", 0xffec8b); + framebuffer::basecolor lightgoldenrod3("lightgoldenrod3", 0xcdbe70); + framebuffer::basecolor lightgoldenrod2("lightgoldenrod2", 0xeedc82); + framebuffer::basecolor cornsilk3("cornsilk3", 0xcdc8b1); + framebuffer::basecolor cornsilk2("cornsilk2", 0xeee8cd); + framebuffer::basecolor cornsilk("cornsilk", 0xfff8dc); + framebuffer::basecolor cornsilk1("cornsilk1", 0xfff8dc); + framebuffer::basecolor goldenrod("goldenrod", 0xdaa520); + framebuffer::basecolor goldenrod1("goldenrod1", 0xffc125); + framebuffer::basecolor goldenrod2("goldenrod2", 0xeeb422); + framebuffer::basecolor goldenrod3("goldenrod3", 0xcd9b1d); + framebuffer::basecolor goldenrod4("goldenrod4", 0x8b6914); + framebuffer::basecolor darkgoldenrod("darkgoldenrod", 0xb8860b); + framebuffer::basecolor darkgoldenrod1("darkgoldenrod1", 0xffb90f); + framebuffer::basecolor darkgoldenrod2("darkgoldenrod2", 0xeead0e); + framebuffer::basecolor darkgoldenrod3("darkgoldenrod3", 0xcd950c); + framebuffer::basecolor darkgoldenrod4("darkgoldenrod4", 0x8b6508); + framebuffer::basecolor floralwhite("floralwhite", 0xfffaf0); + framebuffer::basecolor wheat2("wheat2", 0xeed8ae); + framebuffer::basecolor oldlace("oldlace", 0xfdf5e6); + framebuffer::basecolor wheat("wheat", 0xf5deb3); + framebuffer::basecolor wheat1("wheat1", 0xffe7ba); + framebuffer::basecolor wheat3("wheat3", 0xcdba96); + framebuffer::basecolor orange("orange", 0xffa500); + framebuffer::basecolor orange1("orange1", 0xffa500); + framebuffer::basecolor orange2("orange2", 0xee9a00); + framebuffer::basecolor orange3("orange3", 0xcd8500); + framebuffer::basecolor orange4("orange4", 0x8b5a00); + framebuffer::basecolor wheat4("wheat4", 0x8b7e66); + framebuffer::basecolor moccasin("moccasin", 0xffe4b5); + framebuffer::basecolor papayawhip("papayawhip", 0xffefd5); + framebuffer::basecolor navajowhite3("navajowhite3", 0xcdb38b); + framebuffer::basecolor blanchedalmond("blanchedalmond", 0xffebcd); + framebuffer::basecolor navajowhite("navajowhite", 0xffdead); + framebuffer::basecolor navajowhite1("navajowhite1", 0xffdead); + framebuffer::basecolor navajowhite2("navajowhite2", 0xeecfa1); + framebuffer::basecolor navajowhite4("navajowhite4", 0x8b795e); + framebuffer::basecolor antiquewhite4("antiquewhite4", 0x8b8378); + framebuffer::basecolor antiquewhite("antiquewhite", 0xfaebd7); + framebuffer::basecolor tan("tan", 0xd2b48c); + framebuffer::basecolor bisque4("bisque4", 0x8b7d6b); + framebuffer::basecolor burlywood("burlywood", 0xdeb887); + framebuffer::basecolor antiquewhite2("antiquewhite2", 0xeedfcc); + framebuffer::basecolor burlywood1("burlywood1", 0xffd39b); + framebuffer::basecolor burlywood3("burlywood3", 0xcdaa7d); + framebuffer::basecolor burlywood2("burlywood2", 0xeec591); + framebuffer::basecolor antiquewhite1("antiquewhite1", 0xffefdb); + framebuffer::basecolor burlywood4("burlywood4", 0x8b7355); + framebuffer::basecolor antiquewhite3("antiquewhite3", 0xcdc0b0); + framebuffer::basecolor darkorange("darkorange", 0xff8c00); + framebuffer::basecolor bisque2("bisque2", 0xeed5b7); + framebuffer::basecolor bisque("bisque", 0xffe4c4); + framebuffer::basecolor bisque1("bisque1", 0xffe4c4); + framebuffer::basecolor bisque3("bisque3", 0xcdb79e); + framebuffer::basecolor darkorange1("darkorange1", 0xff7f00); + framebuffer::basecolor linen("linen", 0xfaf0e6); + framebuffer::basecolor darkorange2("darkorange2", 0xee7600); + framebuffer::basecolor darkorange3("darkorange3", 0xcd6600); + framebuffer::basecolor darkorange4("darkorange4", 0x8b4500); + framebuffer::basecolor peru("peru", 0xcd853f); + framebuffer::basecolor tan1("tan1", 0xffa54f); + framebuffer::basecolor tan2("tan2", 0xee9a49); + framebuffer::basecolor tan3("tan3", 0xcd853f); + framebuffer::basecolor tan4("tan4", 0x8b5a2b); + framebuffer::basecolor peachpuff("peachpuff", 0xffdab9); + framebuffer::basecolor peachpuff1("peachpuff1", 0xffdab9); + framebuffer::basecolor peachpuff4("peachpuff4", 0x8b7765); + framebuffer::basecolor peachpuff2("peachpuff2", 0xeecbad); + framebuffer::basecolor peachpuff3("peachpuff3", 0xcdaf95); + framebuffer::basecolor sandybrown("sandybrown", 0xf4a460); + framebuffer::basecolor seashell4("seashell4", 0x8b8682); + framebuffer::basecolor seashell2("seashell2", 0xeee5de); + framebuffer::basecolor seashell3("seashell3", 0xcdc5bf); + framebuffer::basecolor chocolate("chocolate", 0xd2691e); + framebuffer::basecolor chocolate1("chocolate1", 0xff7f24); + framebuffer::basecolor chocolate2("chocolate2", 0xee7621); + framebuffer::basecolor chocolate3("chocolate3", 0xcd661d); + framebuffer::basecolor chocolate4("chocolate4", 0x8b4513); + framebuffer::basecolor saddlebrown("saddlebrown", 0x8b4513); + framebuffer::basecolor seashell("seashell", 0xfff5ee); + framebuffer::basecolor seashell1("seashell1", 0xfff5ee); + framebuffer::basecolor sienna4("sienna4", 0x8b4726); + framebuffer::basecolor sienna("sienna", 0xa0522d); + framebuffer::basecolor sienna1("sienna1", 0xff8247); + framebuffer::basecolor sienna2("sienna2", 0xee7942); + framebuffer::basecolor sienna3("sienna3", 0xcd6839); + framebuffer::basecolor lightsalmon3("lightsalmon3", 0xcd8162); + framebuffer::basecolor lightsalmon("lightsalmon", 0xffa07a); + framebuffer::basecolor lightsalmon1("lightsalmon1", 0xffa07a); + framebuffer::basecolor lightsalmon4("lightsalmon4", 0x8b5742); + framebuffer::basecolor lightsalmon2("lightsalmon2", 0xee9572); + framebuffer::basecolor coral("coral", 0xff7f50); + framebuffer::basecolor orangered("orangered", 0xff4500); + framebuffer::basecolor orangered1("orangered1", 0xff4500); + framebuffer::basecolor orangered2("orangered2", 0xee4000); + framebuffer::basecolor orangered3("orangered3", 0xcd3700); + framebuffer::basecolor orangered4("orangered4", 0x8b2500); + framebuffer::basecolor darksalmon("darksalmon", 0xe9967a); + framebuffer::basecolor salmon1("salmon1", 0xff8c69); + framebuffer::basecolor salmon2("salmon2", 0xee8262); + framebuffer::basecolor salmon3("salmon3", 0xcd7054); + framebuffer::basecolor salmon4("salmon4", 0x8b4c39); + framebuffer::basecolor coral1("coral1", 0xff7256); + framebuffer::basecolor coral2("coral2", 0xee6a50); + framebuffer::basecolor coral3("coral3", 0xcd5b45); + framebuffer::basecolor coral4("coral4", 0x8b3e2f); + framebuffer::basecolor tomato4("tomato4", 0x8b3626); + framebuffer::basecolor tomato("tomato", 0xff6347); + framebuffer::basecolor tomato1("tomato1", 0xff6347); + framebuffer::basecolor tomato2("tomato2", 0xee5c42); + framebuffer::basecolor tomato3("tomato3", 0xcd4f39); + framebuffer::basecolor mistyrose4("mistyrose4", 0x8b7d7b); + framebuffer::basecolor mistyrose2("mistyrose2", 0xeed5d2); + framebuffer::basecolor mistyrose("mistyrose", 0xffe4e1); + framebuffer::basecolor mistyrose1("mistyrose1", 0xffe4e1); + framebuffer::basecolor salmon("salmon", 0xfa8072); + framebuffer::basecolor mistyrose3("mistyrose3", 0xcdb7b5); + framebuffer::basecolor white("white", 0xffffff); + framebuffer::basecolor gray100("gray100", 0xffffff); + framebuffer::basecolor grey100("grey100", 0xffffff); + framebuffer::basecolor gray99("gray99", 0xfcfcfc); + framebuffer::basecolor grey99("grey99", 0xfcfcfc); + framebuffer::basecolor gray98("gray98", 0xfafafa); + framebuffer::basecolor grey98("grey98", 0xfafafa); + framebuffer::basecolor gray97("gray97", 0xf7f7f7); + framebuffer::basecolor grey97("grey97", 0xf7f7f7); + framebuffer::basecolor gray96("gray96", 0xf5f5f5); + framebuffer::basecolor grey96("grey96", 0xf5f5f5); + framebuffer::basecolor whitesmoke("whitesmoke", 0xf5f5f5); + framebuffer::basecolor gray95("gray95", 0xf2f2f2); + framebuffer::basecolor grey95("grey95", 0xf2f2f2); + framebuffer::basecolor gray94("gray94", 0xf0f0f0); + framebuffer::basecolor grey94("grey94", 0xf0f0f0); + framebuffer::basecolor gray93("gray93", 0xededed); + framebuffer::basecolor grey93("grey93", 0xededed); + framebuffer::basecolor gray92("gray92", 0xebebeb); + framebuffer::basecolor grey92("grey92", 0xebebeb); + framebuffer::basecolor gray91("gray91", 0xe8e8e8); + framebuffer::basecolor grey91("grey91", 0xe8e8e8); + framebuffer::basecolor gray90("gray90", 0xe5e5e5); + framebuffer::basecolor grey90("grey90", 0xe5e5e5); + framebuffer::basecolor gray89("gray89", 0xe3e3e3); + framebuffer::basecolor grey89("grey89", 0xe3e3e3); + framebuffer::basecolor gray88("gray88", 0xe0e0e0); + framebuffer::basecolor grey88("grey88", 0xe0e0e0); + framebuffer::basecolor gray87("gray87", 0xdedede); + framebuffer::basecolor grey87("grey87", 0xdedede); + framebuffer::basecolor gainsboro("gainsboro", 0xdcdcdc); + framebuffer::basecolor gray86("gray86", 0xdbdbdb); + framebuffer::basecolor grey86("grey86", 0xdbdbdb); + framebuffer::basecolor gray85("gray85", 0xd9d9d9); + framebuffer::basecolor grey85("grey85", 0xd9d9d9); + framebuffer::basecolor gray84("gray84", 0xd6d6d6); + framebuffer::basecolor grey84("grey84", 0xd6d6d6); + framebuffer::basecolor gray83("gray83", 0xd4d4d4); + framebuffer::basecolor grey83("grey83", 0xd4d4d4); + framebuffer::basecolor lightgray("lightgray", 0xd3d3d3); + framebuffer::basecolor lightgrey("lightgrey", 0xd3d3d3); + framebuffer::basecolor gray82("gray82", 0xd1d1d1); + framebuffer::basecolor grey82("grey82", 0xd1d1d1); + framebuffer::basecolor gray81("gray81", 0xcfcfcf); + framebuffer::basecolor grey81("grey81", 0xcfcfcf); + framebuffer::basecolor gray80("gray80", 0xcccccc); + framebuffer::basecolor grey80("grey80", 0xcccccc); + framebuffer::basecolor gray79("gray79", 0xc9c9c9); + framebuffer::basecolor grey79("grey79", 0xc9c9c9); + framebuffer::basecolor gray78("gray78", 0xc7c7c7); + framebuffer::basecolor grey78("grey78", 0xc7c7c7); + framebuffer::basecolor gray77("gray77", 0xc4c4c4); + framebuffer::basecolor grey77("grey77", 0xc4c4c4); + framebuffer::basecolor gray76("gray76", 0xc2c2c2); + framebuffer::basecolor grey76("grey76", 0xc2c2c2); + framebuffer::basecolor silver("silver", 0xc0c0c0); + framebuffer::basecolor gray75("gray75", 0xbfbfbf); + framebuffer::basecolor grey75("grey75", 0xbfbfbf); + framebuffer::basecolor gray74("gray74", 0xbdbdbd); + framebuffer::basecolor grey74("grey74", 0xbdbdbd); + framebuffer::basecolor gray73("gray73", 0xbababa); + framebuffer::basecolor grey73("grey73", 0xbababa); + framebuffer::basecolor gray72("gray72", 0xb8b8b8); + framebuffer::basecolor grey72("grey72", 0xb8b8b8); + framebuffer::basecolor gray71("gray71", 0xb5b5b5); + framebuffer::basecolor grey71("grey71", 0xb5b5b5); + framebuffer::basecolor gray70("gray70", 0xb3b3b3); + framebuffer::basecolor grey70("grey70", 0xb3b3b3); + framebuffer::basecolor gray69("gray69", 0xb0b0b0); + framebuffer::basecolor grey69("grey69", 0xb0b0b0); + framebuffer::basecolor gray68("gray68", 0xadadad); + framebuffer::basecolor grey68("grey68", 0xadadad); + framebuffer::basecolor gray67("gray67", 0xababab); + framebuffer::basecolor grey67("grey67", 0xababab); + framebuffer::basecolor darkgray("darkgray", 0xa9a9a9); + framebuffer::basecolor darkgrey("darkgrey", 0xa9a9a9); + framebuffer::basecolor gray66("gray66", 0xa8a8a8); + framebuffer::basecolor grey66("grey66", 0xa8a8a8); + framebuffer::basecolor gray65("gray65", 0xa6a6a6); + framebuffer::basecolor grey65("grey65", 0xa6a6a6); + framebuffer::basecolor gray64("gray64", 0xa3a3a3); + framebuffer::basecolor grey64("grey64", 0xa3a3a3); + framebuffer::basecolor gray63("gray63", 0xa1a1a1); + framebuffer::basecolor grey63("grey63", 0xa1a1a1); + framebuffer::basecolor gray62("gray62", 0x9e9e9e); + framebuffer::basecolor grey62("grey62", 0x9e9e9e); + framebuffer::basecolor gray61("gray61", 0x9c9c9c); + framebuffer::basecolor grey61("grey61", 0x9c9c9c); + framebuffer::basecolor gray60("gray60", 0x999999); + framebuffer::basecolor grey60("grey60", 0x999999); + framebuffer::basecolor gray59("gray59", 0x969696); + framebuffer::basecolor grey59("grey59", 0x969696); + framebuffer::basecolor gray58("gray58", 0x949494); + framebuffer::basecolor grey58("grey58", 0x949494); + framebuffer::basecolor gray57("gray57", 0x919191); + framebuffer::basecolor grey57("grey57", 0x919191); + framebuffer::basecolor gray56("gray56", 0x8f8f8f); + framebuffer::basecolor grey56("grey56", 0x8f8f8f); + framebuffer::basecolor gray55("gray55", 0x8c8c8c); + framebuffer::basecolor grey55("grey55", 0x8c8c8c); + framebuffer::basecolor gray54("gray54", 0x8a8a8a); + framebuffer::basecolor grey54("grey54", 0x8a8a8a); + framebuffer::basecolor gray53("gray53", 0x878787); + framebuffer::basecolor grey53("grey53", 0x878787); + framebuffer::basecolor gray52("gray52", 0x858585); + framebuffer::basecolor grey52("grey52", 0x858585); + framebuffer::basecolor gray51("gray51", 0x828282); + framebuffer::basecolor grey51("grey51", 0x828282); + framebuffer::basecolor fractal("fractal", 0x808080); + framebuffer::basecolor gray50("gray50", 0x7f7f7f); + framebuffer::basecolor grey50("grey50", 0x7f7f7f); + framebuffer::basecolor gray("gray", 0x7e7e7e); + framebuffer::basecolor gray49("gray49", 0x7d7d7d); + framebuffer::basecolor grey49("grey49", 0x7d7d7d); + framebuffer::basecolor gray48("gray48", 0x7a7a7a); + framebuffer::basecolor grey48("grey48", 0x7a7a7a); + framebuffer::basecolor gray47("gray47", 0x787878); + framebuffer::basecolor grey47("grey47", 0x787878); + framebuffer::basecolor gray46("gray46", 0x757575); + framebuffer::basecolor grey46("grey46", 0x757575); + framebuffer::basecolor gray45("gray45", 0x737373); + framebuffer::basecolor grey45("grey45", 0x737373); + framebuffer::basecolor gray44("gray44", 0x707070); + framebuffer::basecolor grey44("grey44", 0x707070); + framebuffer::basecolor gray43("gray43", 0x6e6e6e); + framebuffer::basecolor grey43("grey43", 0x6e6e6e); + framebuffer::basecolor gray42("gray42", 0x6b6b6b); + framebuffer::basecolor grey42("grey42", 0x6b6b6b); + framebuffer::basecolor dimgray("dimgray", 0x696969); + framebuffer::basecolor dimgrey("dimgrey", 0x696969); + framebuffer::basecolor gray41("gray41", 0x696969); + framebuffer::basecolor grey41("grey41", 0x696969); + framebuffer::basecolor gray40("gray40", 0x666666); + framebuffer::basecolor grey40("grey40", 0x666666); + framebuffer::basecolor gray39("gray39", 0x636363); + framebuffer::basecolor grey39("grey39", 0x636363); + framebuffer::basecolor gray38("gray38", 0x616161); + framebuffer::basecolor grey38("grey38", 0x616161); + framebuffer::basecolor gray37("gray37", 0x5e5e5e); + framebuffer::basecolor grey37("grey37", 0x5e5e5e); + framebuffer::basecolor gray36("gray36", 0x5c5c5c); + framebuffer::basecolor grey36("grey36", 0x5c5c5c); + framebuffer::basecolor gray35("gray35", 0x595959); + framebuffer::basecolor grey35("grey35", 0x595959); + framebuffer::basecolor gray34("gray34", 0x575757); + framebuffer::basecolor grey34("grey34", 0x575757); + framebuffer::basecolor gray33("gray33", 0x545454); + framebuffer::basecolor grey33("grey33", 0x545454); + framebuffer::basecolor gray32("gray32", 0x525252); + framebuffer::basecolor grey32("grey32", 0x525252); + framebuffer::basecolor gray31("gray31", 0x4f4f4f); + framebuffer::basecolor grey31("grey31", 0x4f4f4f); + framebuffer::basecolor gray30("gray30", 0x4d4d4d); + framebuffer::basecolor grey30("grey30", 0x4d4d4d); + framebuffer::basecolor gray29("gray29", 0x4a4a4a); + framebuffer::basecolor grey29("grey29", 0x4a4a4a); + framebuffer::basecolor gray28("gray28", 0x474747); + framebuffer::basecolor grey28("grey28", 0x474747); + framebuffer::basecolor gray27("gray27", 0x454545); + framebuffer::basecolor grey27("grey27", 0x454545); + framebuffer::basecolor gray26("gray26", 0x424242); + framebuffer::basecolor grey26("grey26", 0x424242); + framebuffer::basecolor gray25("gray25", 0x404040); + framebuffer::basecolor grey25("grey25", 0x404040); + framebuffer::basecolor gray24("gray24", 0x3d3d3d); + framebuffer::basecolor grey24("grey24", 0x3d3d3d); + framebuffer::basecolor gray23("gray23", 0x3b3b3b); + framebuffer::basecolor grey23("grey23", 0x3b3b3b); + framebuffer::basecolor gray22("gray22", 0x383838); + framebuffer::basecolor grey22("grey22", 0x383838); + framebuffer::basecolor gray21("gray21", 0x363636); + framebuffer::basecolor grey21("grey21", 0x363636); + framebuffer::basecolor gray20("gray20", 0x333333); + framebuffer::basecolor grey20("grey20", 0x333333); + framebuffer::basecolor gray19("gray19", 0x303030); + framebuffer::basecolor grey19("grey19", 0x303030); + framebuffer::basecolor gray18("gray18", 0x2e2e2e); + framebuffer::basecolor grey18("grey18", 0x2e2e2e); + framebuffer::basecolor gray17("gray17", 0x2b2b2b); + framebuffer::basecolor grey17("grey17", 0x2b2b2b); + framebuffer::basecolor gray16("gray16", 0x292929); + framebuffer::basecolor grey16("grey16", 0x292929); + framebuffer::basecolor gray15("gray15", 0x262626); + framebuffer::basecolor grey15("grey15", 0x262626); + framebuffer::basecolor gray14("gray14", 0x242424); + framebuffer::basecolor grey14("grey14", 0x242424); + framebuffer::basecolor gray13("gray13", 0x212121); + framebuffer::basecolor grey13("grey13", 0x212121); + framebuffer::basecolor gray12("gray12", 0x1f1f1f); + framebuffer::basecolor grey12("grey12", 0x1f1f1f); + framebuffer::basecolor gray11("gray11", 0x1c1c1c); + framebuffer::basecolor grey11("grey11", 0x1c1c1c); + framebuffer::basecolor gray10("gray10", 0x1a1a1a); + framebuffer::basecolor grey10("grey10", 0x1a1a1a); + framebuffer::basecolor gray9("gray9", 0x171717); + framebuffer::basecolor grey9("grey9", 0x171717); + framebuffer::basecolor gray8("gray8", 0x141414); + framebuffer::basecolor grey8("grey8", 0x141414); + framebuffer::basecolor gray7("gray7", 0x121212); + framebuffer::basecolor grey7("grey7", 0x121212); + framebuffer::basecolor gray6("gray6", 0x0f0f0f); + framebuffer::basecolor grey6("grey6", 0x0f0f0f); + framebuffer::basecolor gray5("gray5", 0x0d0d0d); + framebuffer::basecolor grey5("grey5", 0x0d0d0d); + framebuffer::basecolor gray4("gray4", 0x0a0a0a); + framebuffer::basecolor grey4("grey4", 0x0a0a0a); + framebuffer::basecolor gray3("gray3", 0x080808); + framebuffer::basecolor grey3("grey3", 0x080808); + framebuffer::basecolor gray2("gray2", 0x050505); + framebuffer::basecolor grey2("grey2", 0x050505); + framebuffer::basecolor gray1("gray1", 0x030303); + framebuffer::basecolor grey1("grey1", 0x030303); + framebuffer::basecolor black("black", 0x000000); + framebuffer::basecolor gray0("gray0", 0x000000); + framebuffer::basecolor grey0("grey0", 0x000000); +} diff --git a/src/library/framebuffer-colors-opaque.cpp b/src/library/framebuffer-colors-opaque.cpp new file mode 100644 index 00000000..ea7fb68f --- /dev/null +++ b/src/library/framebuffer-colors-opaque.cpp @@ -0,0 +1,17 @@ +#include "framebuffer.hpp" + +namespace +{ + framebuffer::color_mod opaque10("opaque10", [](int64_t& v) { v = (230ULL << 24) | (v & 0xFFFFFF); }); + framebuffer::color_mod opaque20("opaque20", [](int64_t& v) { v = (205ULL << 24) | (v & 0xFFFFFF); }); + framebuffer::color_mod opaque25("opaque25", [](int64_t& v) { v = (192ULL << 24) | (v & 0xFFFFFF); }); + framebuffer::color_mod opaque30("opaque30", [](int64_t& v) { v = (179ULL << 24) | (v & 0xFFFFFF); }); + framebuffer::color_mod opaque40("opaque40", [](int64_t& v) { v = (154ULL << 24) | (v & 0xFFFFFF); }); + framebuffer::color_mod opaque50("opaque50", [](int64_t& v) { v = (128ULL << 24) | (v & 0xFFFFFF); }); + framebuffer::color_mod opaque60("opaque60", [](int64_t& v) { v = (102ULL << 24) | (v & 0xFFFFFF); }); + framebuffer::color_mod opaque70("opaque70", [](int64_t& v) { v = (77ULL << 24) | (v & 0xFFFFFF); }); + framebuffer::color_mod opaque75("opaque75", [](int64_t& v) { v = (64ULL << 24) | (v & 0xFFFFFF); }); + framebuffer::color_mod opaque80("opaque80", [](int64_t& v) { v = (51ULL << 24) | (v & 0xFFFFFF); }); + framebuffer::color_mod opaque90("opaque90", [](int64_t& v) { v = (26ULL << 24) | (v & 0xFFFFFF); }); + framebuffer::color_mod opaque("opaque", [](int64_t& v) { v = (0ULL << 24) | (v & 0xFFFFFF); }); +} diff --git a/src/library/framebuffer-colors-transparent.cpp b/src/library/framebuffer-colors-transparent.cpp new file mode 100644 index 00000000..ad8f47f2 --- /dev/null +++ b/src/library/framebuffer-colors-transparent.cpp @@ -0,0 +1,6 @@ +#include "framebuffer.hpp" + +namespace +{ + framebuffer::basecolor transparent("transparent", -1); +} diff --git a/src/library/framebuffer-colors-w3c.cpp b/src/library/framebuffer-colors-w3c.cpp new file mode 100644 index 00000000..e4ea9922 --- /dev/null +++ b/src/library/framebuffer-colors-w3c.cpp @@ -0,0 +1,152 @@ +#include "framebuffer.hpp" + +namespace +{ + framebuffer::basecolor aliceblue("aliceblue", 0xf0f8ff); + framebuffer::basecolor antiquewhite("antiquewhite", 0xfaebd7); + framebuffer::basecolor aqua("aqua", 0x00ffff); + framebuffer::basecolor aquamarine("aquamarine", 0x7fffd4); + framebuffer::basecolor azure("azure", 0xf0ffff); + framebuffer::basecolor beige("beige", 0xf5f5dc); + framebuffer::basecolor bisque("bisque", 0xffe4c4); + framebuffer::basecolor black("black", 0x000000); + framebuffer::basecolor blanchedalmond("blanchedalmond", 0xffebcd); + framebuffer::basecolor blue("blue", 0x0000ff); + framebuffer::basecolor blueviolet("blueviolet", 0x8a2be2); + framebuffer::basecolor brown("brown", 0xa52a2a); + framebuffer::basecolor burlywood("burlywood", 0xdeb887); + framebuffer::basecolor cadetblue("cadetblue", 0x5f9ea0); + framebuffer::basecolor chartreuse("chartreuse", 0x7fff00); + framebuffer::basecolor chocolate("chocolate", 0xd2691e); + framebuffer::basecolor coral("coral", 0xff7f50); + framebuffer::basecolor cornflowerblue("cornflowerblue", 0x6495ed); + framebuffer::basecolor cornsilk("cornsilk", 0xfff8dc); + framebuffer::basecolor crimson("crimson", 0xdc143c); + framebuffer::basecolor cyan("cyan", 0x00ffff); + framebuffer::basecolor darkblue("darkblue", 0x00008b); + framebuffer::basecolor darkcyan("darkcyan", 0x008b8b); + framebuffer::basecolor darkgoldenrod("darkgoldenrod", 0xb8860b); + framebuffer::basecolor darkgray("darkgray", 0xa9a9a9); + framebuffer::basecolor darkgreen("darkgreen", 0x006400); + framebuffer::basecolor darkgrey("darkgrey", 0xa9a9a9); + framebuffer::basecolor darkkhaki("darkkhaki", 0xbdb76b); + framebuffer::basecolor darkmagenta("darkmagenta", 0x8b008b); + framebuffer::basecolor darkolivegreen("darkolivegreen", 0x556b2f); + framebuffer::basecolor darkorange("darkorange", 0xff8c00); + framebuffer::basecolor darkorchid("darkorchid", 0x9932cc); + framebuffer::basecolor darkred("darkred", 0x8b0000); + framebuffer::basecolor darksalmon("darksalmon", 0xe9967a); + framebuffer::basecolor darkseagreen("darkseagreen", 0x8fbc8f); + framebuffer::basecolor darkslateblue("darkslateblue", 0x483d8b); + framebuffer::basecolor darkslategray("darkslategray", 0x2f4f4f); + framebuffer::basecolor darkslategrey("darkslategrey", 0x2f4f4f); + framebuffer::basecolor darkturquoise("darkturquoise", 0x00ced1); + framebuffer::basecolor darkviolet("darkviolet", 0x9400d3); + framebuffer::basecolor deeppink("deeppink", 0xff1493); + framebuffer::basecolor deepskyblue("deepskyblue", 0x00bfff); + framebuffer::basecolor dimgray("dimgray", 0x696969); + framebuffer::basecolor dimgrey("dimgrey", 0x696969); + framebuffer::basecolor dodgerblue("dodgerblue", 0x1e90ff); + framebuffer::basecolor firebrick("firebrick", 0xb22222); + framebuffer::basecolor floralwhite("floralwhite", 0xfffaf0); + framebuffer::basecolor forestgreen("forestgreen", 0x228b22); + framebuffer::basecolor fuchsia("fuchsia", 0xff00ff); + framebuffer::basecolor gainsboro("gainsboro", 0xdcdcdc); + framebuffer::basecolor ghostwhite("ghostwhite", 0xf8f8ff); + framebuffer::basecolor gold("gold", 0xffd700); + framebuffer::basecolor goldenrod("goldenrod", 0xdaa520); + framebuffer::basecolor gray("gray", 0x808080); + framebuffer::basecolor green("green", 0x008000); + framebuffer::basecolor greenyellow("greenyellow", 0xadff2f); + framebuffer::basecolor grey("grey", 0x808080); + framebuffer::basecolor honeydew("honeydew", 0xf0fff0); + framebuffer::basecolor hotpink("hotpink", 0xff69b4); + framebuffer::basecolor indianred("indianred", 0xcd5c5c); + framebuffer::basecolor indigo("indigo", 0x4b0082); + framebuffer::basecolor ivory("ivory", 0xfffff0); + framebuffer::basecolor khaki("khaki", 0xf0e68c); + framebuffer::basecolor lavender("lavender", 0xe6e6fa); + framebuffer::basecolor lavenderblush("lavenderblush", 0xfff0f5); + framebuffer::basecolor lawngreen("lawngreen", 0x7cfc00); + framebuffer::basecolor lemonchiffon("lemonchiffon", 0xfffacd); + framebuffer::basecolor lightblue("lightblue", 0xadd8e6); + framebuffer::basecolor lightcoral("lightcoral", 0xf08080); + framebuffer::basecolor lightcyan("lightcyan", 0xe0ffff); + framebuffer::basecolor lightgoldenrodyellow("lightgoldenrodyellow", 0xfafad2); + framebuffer::basecolor lightgray("lightgray", 0xd3d3d3); + framebuffer::basecolor lightgreen("lightgreen", 0x90ee90); + framebuffer::basecolor lightgrey("lightgrey", 0xd3d3d3); + framebuffer::basecolor lightpink("lightpink", 0xffb6c1); + framebuffer::basecolor lightsalmon("lightsalmon", 0xffa07a); + framebuffer::basecolor lightseagreen("lightseagreen", 0x20b2aa); + framebuffer::basecolor lightskyblue("lightskyblue", 0x87cefa); + framebuffer::basecolor lightslategray("lightslategray", 0x778899); + framebuffer::basecolor lightslategrey("lightslategrey", 0x778899); + framebuffer::basecolor lightsteelblue("lightsteelblue", 0xb0c4de); + framebuffer::basecolor lightyellow("lightyellow", 0xffffe0); + framebuffer::basecolor lime("lime", 0x00ff00); + framebuffer::basecolor limegreen("limegreen", 0x32cd32); + framebuffer::basecolor linen("linen", 0xfaf0e6); + framebuffer::basecolor magenta("magenta", 0xff00ff); + framebuffer::basecolor maroon("maroon", 0x800000); + framebuffer::basecolor mediumaquamarine("mediumaquamarine", 0x66cdaa); + framebuffer::basecolor mediumblue("mediumblue", 0x0000cd); + framebuffer::basecolor mediumorchid("mediumorchid", 0xba55d3); + framebuffer::basecolor mediumpurple("mediumpurple", 0x9370db); + framebuffer::basecolor mediumseagreen("mediumseagreen", 0x3cb371); + framebuffer::basecolor mediumslateblue("mediumslateblue", 0x7b68ee); + framebuffer::basecolor mediumspringgreen("mediumspringgreen", 0x00fa9a); + framebuffer::basecolor mediumturquoise("mediumturquoise", 0x48d1cc); + framebuffer::basecolor mediumvioletred("mediumvioletred", 0xc71585); + framebuffer::basecolor midnightblue("midnightblue", 0x191970); + framebuffer::basecolor mintcream("mintcream", 0xf5fffa); + framebuffer::basecolor mistyrose("mistyrose", 0xffe4e1); + framebuffer::basecolor moccasin("moccasin", 0xffe4b5); + framebuffer::basecolor navajowhite("navajowhite", 0xffdead); + framebuffer::basecolor navy("navy", 0x000080); + framebuffer::basecolor oldlace("oldlace", 0xfdf5e6); + framebuffer::basecolor olive("olive", 0x808000); + framebuffer::basecolor olivedrab("olivedrab", 0x6b8e23); + framebuffer::basecolor orange("orange", 0xffa500); + framebuffer::basecolor orangered("orangered", 0xff4500); + framebuffer::basecolor orchid("orchid", 0xda70d6); + framebuffer::basecolor palegoldenrod("palegoldenrod", 0xeee8aa); + framebuffer::basecolor palegreen("palegreen", 0x98fb98); + framebuffer::basecolor paleturquoise("paleturquoise", 0xafeeee); + framebuffer::basecolor palevioletred("palevioletred", 0xdb7093); + framebuffer::basecolor papayawhip("papayawhip", 0xffefd5); + framebuffer::basecolor peachpuff("peachpuff", 0xffdab9); + framebuffer::basecolor peru("peru", 0xcd853f); + framebuffer::basecolor pink("pink", 0xffc0cb); + framebuffer::basecolor plum("plum", 0xdda0dd); + framebuffer::basecolor powderblue("powderblue", 0xb0e0e6); + framebuffer::basecolor purple("purple", 0x800080); + framebuffer::basecolor red("red", 0xff0000); + framebuffer::basecolor rosybrown("rosybrown", 0xbc8f8f); + framebuffer::basecolor royalblue("royalblue", 0x4169e1); + framebuffer::basecolor saddlebrown("saddlebrown", 0x8b4513); + framebuffer::basecolor salmon("salmon", 0xfa8072); + framebuffer::basecolor sandybrown("sandybrown", 0xf4a460); + framebuffer::basecolor seagreen("seagreen", 0x2e8b57); + framebuffer::basecolor seashell("seashell", 0xfff5ee); + framebuffer::basecolor sienna("sienna", 0xa0522d); + framebuffer::basecolor silver("silver", 0xc0c0c0); + framebuffer::basecolor skyblue("skyblue", 0x87ceeb); + framebuffer::basecolor slateblue("slateblue", 0x6a5acd); + framebuffer::basecolor slategray("slategray", 0x708090); + framebuffer::basecolor slategrey("slategrey", 0x708090); + framebuffer::basecolor snow("snow", 0xfffafa); + framebuffer::basecolor springgreen("springgreen", 0x00ff7f); + framebuffer::basecolor steelblue("steelblue", 0x4682b4); + framebuffer::basecolor tan("tan", 0xd2b48c); + framebuffer::basecolor teal("teal", 0x008080); + framebuffer::basecolor thistle("thistle", 0xd8bfd8); + framebuffer::basecolor tomato("tomato", 0xff6347); + framebuffer::basecolor turquoise("turquoise", 0x40e0d0); + framebuffer::basecolor violet("violet", 0xee82ee); + framebuffer::basecolor wheat("wheat", 0xf5deb3); + framebuffer::basecolor white("white", 0xffffff); + framebuffer::basecolor whitesmoke("whitesmoke", 0xf5f5f5); + framebuffer::basecolor yellow("yellow", 0xffff00); + framebuffer::basecolor yellowgreen("yellowgreen", 0x9acd32); +} diff --git a/src/library/framebuffer.cpp b/src/library/framebuffer.cpp index 8804c963..93e36b69 100644 --- a/src/library/framebuffer.cpp +++ b/src/library/framebuffer.cpp @@ -97,39 +97,27 @@ namespace struct color_modifier { const char* name; - void(*fn)(int64_t& v); + std::function fn; bool modifier; }; - std::map>& colornames() + std::map, bool>>& colornames() { - static std::map> c; - static bool i = false; - if(!i) { - std::vector tmp = { - {"transparent", [](int64_t& v) { v = -1; }, false}, - {"opaque10", [](int64_t& v) { v = (230ULL << 24) | (v & 0xFFFFFF); }, true}, - {"opaque20", [](int64_t& v) { v = (205ULL << 24) | (v & 0xFFFFFF); }, true}, - {"opaque25", [](int64_t& v) { v = (192ULL << 24) | (v & 0xFFFFFF); }, true}, - {"opaque30", [](int64_t& v) { v = (179ULL << 24) | (v & 0xFFFFFF); }, true}, - {"opaque40", [](int64_t& v) { v = (154ULL << 24) | (v & 0xFFFFFF); }, true}, - {"opaque50", [](int64_t& v) { v = (128ULL << 24) | (v & 0xFFFFFF); }, true}, - {"opaque60", [](int64_t& v) { v = (102ULL << 24) | (v & 0xFFFFFF); }, true}, - {"opaque70", [](int64_t& v) { v = (77ULL << 24) | (v & 0xFFFFFF); }, true}, - {"opaque75", [](int64_t& v) { v = (64ULL << 24) | (v & 0xFFFFFF); }, true}, - {"opaque80", [](int64_t& v) { v = (51ULL << 24) | (v & 0xFFFFFF); }, true}, - {"opaque90", [](int64_t& v) { v = (26ULL << 24) | (v & 0xFFFFFF); }, true}, - {"opaque", [](int64_t& v) { v = (0ULL << 24) | (v & 0xFFFFFF); }, true}, -#include "framebuffer-basecolors.inc" - }; - for(auto j : tmp) - c[j.name] = std::make_pair(j.fn, j.modifier); - i = true; - } + static std::map, bool>> c; return c; } } +basecolor::basecolor(const std::string& name, int64_t value) +{ + colornames()[name] = std::make_pair([value](int64_t& v) { v = value; }, false); +} + +color_mod::color_mod(const std::string& name, void(*fn)(int64_t&)) +{ + colornames()[name] = std::make_pair(fn, true); +} + pixfmt::pixfmt() throw(std::bad_alloc) { pixfmts().push_back(this); diff --git a/src/library/make-basecolors.lua b/src/library/make-basecolors.lua deleted file mode 100644 index 1a370c6a..00000000 --- a/src/library/make-basecolors.lua +++ /dev/null @@ -1,8 +0,0 @@ -#!/usr/bin/env lua - -for line in io.stdin:lines() do - c,name = string.match(line, "#(%x+) ([^ \t]+)"); - if name then - print("{\""..name.."\", [](int64_t& v) { v = 0x"..c.."; }, false},"); - end -end