diff --git a/src/CanvasRenderingContext2d.cc b/src/CanvasRenderingContext2d.cc index c8bac13..ece8639 100644 --- a/src/CanvasRenderingContext2d.cc +++ b/src/CanvasRenderingContext2d.cc @@ -1018,7 +1018,7 @@ Context2d::SetFillColor(const Arguments &args) { HandleScope scope; if (!args[0]->IsString()) return Undefined(); String::AsciiValue str(args[0]); - printf("%s\n", *str); + uint32_t color = rgba_from_string(*str); Context2d *context = ObjectWrap::Unwrap(args.This()); context->state->fillPattern = NULL; //RGBA(context->state->fill,r,g,b,a); diff --git a/src/CanvasRenderingContext2d.h b/src/CanvasRenderingContext2d.h index da89432..d5dd0e4 100644 --- a/src/CanvasRenderingContext2d.h +++ b/src/CanvasRenderingContext2d.h @@ -8,17 +8,10 @@ #ifndef __NODE_CONTEXT2D_H__ #define __NODE_CONTEXT2D_H__ +#include "color.h" #include "Canvas.h" #include "CanvasGradient.h" -/* - * RGBA struct used to retain values of fill/stroke. - */ - -typedef struct { - double r, g, b, a; -} rgba_t; - /* * State struct. * diff --git a/src/color.h b/src/color.h index b1730f9..e95af90 100644 --- a/src/color.h +++ b/src/color.h @@ -9,6 +9,14 @@ #include #include +/* + * RGBA struct. + */ + +typedef struct { + double r, g, b, a; +} rgba_t; + /* * Consume whitespace. */ @@ -36,154 +44,154 @@ */ static struct named_color { - char *name; + const char *name; uint32_t val; } named_colors[] = { - "transparent", 0xffffff00 - , "aliceblue", 0xf0f8ffff - , "antiquewhite", 0xfaebd7ff - , "aqua", 0x00ffffff - , "aquamarine", 0x7fffd4ff - , "azure", 0xf0ffffff - , "beige", 0xf5f5dcff - , "bisque", 0xffe4c4ff - , "black", 0x000000ff - , "blanchedalmond", 0xffebcdff - , "blue", 0x0000ffff - , "blueviolet", 0x8a2be2ff - , "brown", 0xa52a2aff - , "burlywood", 0xdeb887ff - , "cadetblue", 0x5f9ea0ff - , "chartreuse", 0x7fff00ff - , "chocolate", 0xd2691eff - , "coral", 0xff7f50ff - , "cornflowerblue", 0x6495edff - , "cornsilk", 0xfff8dcff - , "crimson", 0xdc143cff - , "cyan", 0x00ffffff - , "darkblue", 0x00008bff - , "darkcyan", 0x008b8bff - , "darkgoldenrod", 0xb8860bff - , "darkgray", 0xa9a9a9ff - , "darkgreen", 0x006400ff - , "darkkhaki", 0xbdb76bff - , "darkmagenta", 0x8b008bff - , "darkolivegreen", 0x556b2fff - , "darkorange", 0xff8c00ff - , "darkorchid", 0x9932ccff - , "darkred", 0x8b0000ff - , "darksalmon", 0xe9967aff - , "darkseagreen", 0x8fbc8fff - , "darkslateblue", 0x483d8bff - , "darkslategray", 0x2f4f4fff - , "darkturquoise", 0x00ced1ff - , "darkviolet", 0x9400d3ff - , "deeppink", 0xff1493ff - , "deepskyblue", 0x00bfffff - , "dimgray", 0x696969ff - , "dodgerblue", 0x1e90ffff - , "feldspar", 0xd19275ff - , "firebrick", 0xb22222ff - , "floralwhite", 0xfffaf0ff - , "forestgreen", 0x228b22ff - , "fuchsia", 0xff00ffff - , "gainsboro", 0xdcdcdcff - , "ghostwhite", 0xf8f8ffff - , "gold", 0xffd700ff - , "goldenrod", 0xdaa520ff - , "gray", 0x808080ff - , "green", 0x008000ff - , "greenyellow", 0xadff2fff - , "honeydew", 0xf0fff0ff - , "hotpink", 0xff69b4ff - , "indianred ", 0xcd5c5cff - , "indigo ", 0x4b0082ff - , "ivory", 0xfffff0ff - , "khaki", 0xf0e68cff - , "lavender", 0xe6e6faff - , "lavenderblush", 0xfff0f5ff - , "lawngreen", 0x7cfc00ff - , "lemonchiffon", 0xfffacdff - , "lightblue", 0xadd8e6ff - , "lightcoral", 0xf08080ff - , "lightcyan", 0xe0ffffff - , "lightgoldenrodyellow", 0xfafad2ff - , "lightgrey", 0xd3d3d3ff - , "lightgreen", 0x90ee90ff - , "lightpink", 0xffb6c1ff - , "lightsalmon", 0xffa07aff - , "lightseagreen", 0x20b2aaff - , "lightskyblue", 0x87cefaff - , "lightslateblue", 0x8470ffff - , "lightslategray", 0x778899ff - , "lightsteelblue", 0xb0c4deff - , "lightyellow", 0xffffe0ff - , "lime", 0x00ff00ff - , "limegreen", 0x32cd32ff - , "linen", 0xfaf0e6ff - , "magenta", 0xff00ffff - , "maroon", 0x800000ff - , "mediumaquamarine", 0x66cdaaff - , "mediumblue", 0x0000cdff - , "mediumorchid", 0xba55d3ff - , "mediumpurple", 0x9370d8ff - , "mediumseagreen", 0x3cb371ff - , "mediumslateblue", 0x7b68eeff - , "mediumspringgreen", 0x00fa9aff - , "mediumturquoise", 0x48d1ccff - , "mediumvioletred", 0xc71585ff - , "midnightblue", 0x191970ff - , "mintcream", 0xf5fffaff - , "mistyrose", 0xffe4e1ff - , "moccasin", 0xffe4b5ff - , "navajowhite", 0xffdeadff - , "navy", 0x000080ff - , "oldlace", 0xfdf5e6ff - , "olive", 0x808000ff - , "olivedrab", 0x6b8e23ff - , "orange", 0xffa500ff - , "orangered", 0xff4500ff - , "orchid", 0xda70d6ff - , "palegoldenrod", 0xeee8aaff - , "palegreen", 0x98fb98ff - , "paleturquoise", 0xafeeeeff - , "palevioletred", 0xd87093ff - , "papayawhip", 0xffefd5ff - , "peachpuff", 0xffdab9ff - , "peru", 0xcd853fff - , "pink", 0xffc0cbff - , "plum", 0xdda0ddff - , "powderblue", 0xb0e0e6ff - , "purple", 0x800080ff - , "red", 0xff0000ff - , "rosybrown", 0xbc8f8fff - , "royalblue", 0x4169e1ff - , "saddlebrown", 0x8b4513ff - , "salmon", 0xfa8072ff - , "sandybrown", 0xf4a460ff - , "seagreen", 0x2e8b57ff - , "seashell", 0xfff5eeff - , "sienna", 0xa0522dff - , "silver", 0xc0c0c0ff - , "skyblue", 0x87ceebff - , "slateblue", 0x6a5acdff - , "slategray", 0x708090ff - , "snow", 0xfffafaff - , "springgreen", 0x00ff7fff - , "steelblue", 0x4682b4ff - , "tan", 0xd2b48cff - , "teal", 0x008080ff - , "thistle", 0xd8bfd8ff - , "tomato", 0xff6347ff - , "turquoise", 0x40e0d0ff - , "violet", 0xee82eeff - , "violetred", 0xd02090ff - , "wheat", 0xf5deb3ff - , "white", 0xffffffff - , "whitesmoke", 0xf5f5f5ff - , "yellow", 0xffff00ff - , "yellowgreen", 0x9acd32ff - , NULL, NULL + {"transparent", 0xffffff00} + , {"aliceblue", 0xf0f8ffff} + , {"antiquewhite", 0xfaebd7ff} + , {"aqua", 0x00ffffff} + , {"aquamarine", 0x7fffd4ff} + , {"azure", 0xf0ffffff} + , {"beige", 0xf5f5dcff} + , {"bisque", 0xffe4c4ff} + , {"black", 0x000000ff} + , {"blanchedalmond", 0xffebcdff} + , {"blue", 0x0000ffff} + , {"blueviolet", 0x8a2be2ff} + , {"brown", 0xa52a2aff} + , {"burlywood", 0xdeb887ff} + , {"cadetblue", 0x5f9ea0ff} + , {"chartreuse", 0x7fff00ff} + , {"chocolate", 0xd2691eff} + , {"coral", 0xff7f50ff} + , {"cornflowerblue", 0x6495edff} + , {"cornsilk", 0xfff8dcff} + , {"crimson", 0xdc143cff} + , {"cyan", 0x00ffffff} + , {"darkblue", 0x00008bff} + , {"darkcyan", 0x008b8bff} + , {"darkgoldenrod", 0xb8860bff} + , {"darkgray", 0xa9a9a9ff} + , {"darkgreen", 0x006400ff} + , {"darkkhaki", 0xbdb76bff} + , {"darkmagenta", 0x8b008bff} + , {"darkolivegreen", 0x556b2fff} + , {"darkorange", 0xff8c00ff} + , {"darkorchid", 0x9932ccff} + , {"darkred", 0x8b0000ff} + , {"darksalmon", 0xe9967aff} + , {"darkseagreen", 0x8fbc8fff} + , {"darkslateblue", 0x483d8bff} + , {"darkslategray", 0x2f4f4fff} + , {"darkturquoise", 0x00ced1ff} + , {"darkviolet", 0x9400d3ff} + , {"deeppink", 0xff1493ff} + , {"deepskyblue", 0x00bfffff} + , {"dimgray", 0x696969ff} + , {"dodgerblue", 0x1e90ffff} + , {"feldspar", 0xd19275ff} + , {"firebrick", 0xb22222ff} + , {"floralwhite", 0xfffaf0ff} + , {"forestgreen", 0x228b22ff} + , {"fuchsia", 0xff00ffff} + , {"gainsboro", 0xdcdcdcff} + , {"ghostwhite", 0xf8f8ffff} + , {"gold", 0xffd700ff} + , {"goldenrod", 0xdaa520ff} + , {"gray", 0x808080ff} + , {"green", 0x008000ff} + , {"greenyellow", 0xadff2fff} + , {"honeydew", 0xf0fff0ff} + , {"hotpink", 0xff69b4ff} + , {"indianred ", 0xcd5c5cff} + , {"indigo ", 0x4b0082ff} + , {"ivory", 0xfffff0ff} + , {"khaki", 0xf0e68cff} + , {"lavender", 0xe6e6faff} + , {"lavenderblush", 0xfff0f5ff} + , {"lawngreen", 0x7cfc00ff} + , {"lemonchiffon", 0xfffacdff} + , {"lightblue", 0xadd8e6ff} + , {"lightcoral", 0xf08080ff} + , {"lightcyan", 0xe0ffffff} + , {"lightgoldenrodyellow", 0xfafa} + , {"lightgrey", 0xd3d3d3ff} + , {"lightgreen", 0x90ee90ff} + , {"lightpink", 0xffb6c1ff} + , {"lightsalmon", 0xffa07aff} + , {"lightseagreen", 0x20b2aaff} + , {"lightskyblue", 0x87cefaff} + , {"lightslateblue", 0x8470ffff} + , {"lightslategray", 0x778899ff} + , {"lightsteelblue", 0xb0c4deff} + , {"lightyellow", 0xffffe0ff} + , {"lime", 0x00ff00ff} + , {"limegreen", 0x32cd32ff} + , {"linen", 0xfaf0e6ff} + , {"magenta", 0xff00ffff} + , {"maroon", 0x800000ff} + , {"mediumaquamarine", 0x66cdaaff} + , {"mediumblue", 0x0000cdff} + , {"mediumorchid", 0xba55d3ff} + , {"mediumpurple", 0x9370d8ff} + , {"mediumseagreen", 0x3cb371ff} + , {"mediumslateblue", 0x7b68eeff} + , {"mediumspringgreen", 0x00fa9af} + , {"mediumturquoise", 0x48d1ccff} + , {"mediumvioletred", 0xc71585ff} + , {"midnightblue", 0x191970ff} + , {"mintcream", 0xf5fffaff} + , {"mistyrose", 0xffe4e1ff} + , {"moccasin", 0xffe4b5ff} + , {"navajowhite", 0xffdeadff} + , {"navy", 0x000080ff} + , {"oldlace", 0xfdf5e6ff} + , {"olive", 0x808000ff} + , {"olivedrab", 0x6b8e23ff} + , {"orange", 0xffa500ff} + , {"orangered", 0xff4500ff} + , {"orchid", 0xda70d6ff} + , {"palegoldenrod", 0xeee8aaff} + , {"palegreen", 0x98fb98ff} + , {"paleturquoise", 0xafeeeeff} + , {"palevioletred", 0xd87093ff} + , {"papayawhip", 0xffefd5ff} + , {"peachpuff", 0xffdab9ff} + , {"peru", 0xcd853fff} + , {"pink", 0xffc0cbff} + , {"plum", 0xdda0ddff} + , {"powderblue", 0xb0e0e6ff} + , {"purple", 0x800080ff} + , {"red", 0xff0000ff} + , {"rosybrown", 0xbc8f8fff} + , {"royalblue", 0x4169e1ff} + , {"saddlebrown", 0x8b4513ff} + , {"salmon", 0xfa8072ff} + , {"sandybrown", 0xf4a460ff} + , {"seagreen", 0x2e8b57ff} + , {"seashell", 0xfff5eeff} + , {"sienna", 0xa0522dff} + , {"silver", 0xc0c0c0ff} + , {"skyblue", 0x87ceebff} + , {"slateblue", 0x6a5acdff} + , {"slategray", 0x708090ff} + , {"snow", 0xfffafaff} + , {"springgreen", 0x00ff7fff} + , {"steelblue", 0x4682b4ff} + , {"tan", 0xd2b48cff} + , {"teal", 0x008080ff} + , {"thistle", 0xd8bfd8ff} + , {"tomato", 0xff6347ff} + , {"turquoise", 0x40e0d0ff} + , {"violet", 0xee82eeff} + , {"violetred", 0xd02090ff} + , {"wheat", 0xf5deb3ff} + , {"white", 0xffffffff} + , {"whitesmoke", 0xf5f5f5ff} + , {"yellow", 0xffff00ff} + , {"yellowgreen", 0x9acd32ff} + , {NULL, NULL} }; /* @@ -222,6 +230,20 @@ h(char c) { return 0; } +/* + * Return rgba_t from rgba. + */ + +rgba_t +rgba_create(uint32_t rgba) { + rgba_t color; + color.r = rgba >> 24; + color.g = rgba >> 16; + color.b = rgba >> 8; + color.a = rgba; + return color; +} + /* * Return rgba from (r,g,b,a). */