diff --git a/doc/helianthus-doc-ru.odt b/doc/helianthus-doc-ru.odt index 684f405..ee482d3 100644 Binary files a/doc/helianthus-doc-ru.odt and b/doc/helianthus-doc-ru.odt differ diff --git a/doc/ru/drawing.html b/doc/ru/drawing.html index ddefe00..856f18c 100644 --- a/doc/ru/drawing.html +++ b/doc/ru/drawing.html @@ -28,15 +28,23 @@
Перечисленные ниже функции позволяют рисовать на экране различные фигуры и текст.
-Для указания цвета используется его числовой код. Код можно записать в виде шестнадцатеричного числа, например: 0xFF0000AA — это полупрозрачный красный (также как #FF0000 в формате web/CSS3, только с добавлением двух цифр альфа-канала в конце). Однако проще всего получить код используя вспомогательные функции: colorByName, colorByRGB, colorByHSV, colorByYUV, а также их аналоги с альфа-каналом: colorByNameA, colorByRGBA, colorByHSVA, colorByYUVA.
+Для указания цвета используется его числовой код. Код можно записать в виде шестнадцатеричного числа, например: 0xFF0000AA — это полупрозрачный красный (также как #FF0000 в формате web/CSS3, только с добавлением двух цифр альфа-канала в конце). Однако проще всего получить код используя константы COLOR_*, например:
+ +COLOR_WHITE — белый,
+COLOR_TRANSPARENT — прозрачный,
+COLOR_RED — красный,
+COLOR_GREEN — зелёный,
+COLOR_BLUE — синий и т. д., все наименования заглавными буквами в соответствии с именами цветов в CSS3.
Также вам помогут вычислить код цвета вспомогательные функции: colorByName, colorByRGB, colorByHSV, colorByYUV, а также их аналоги с альфа-каналом: colorWithAlpha, colorByNameA, colorByRGBA, colorByHSVA, colorByYUVA.
Вы можете также провести и обратную операцию — извлечь данные отдельных цветовых каналов из кода цвета, см. функции: colorGetRed, colorGetGreen, colorGetBlue, colorGetAlpha, colorGetHue, colorGetSaturation, colorGetValue, colorGetYLuminance, colorGetUChromanance, colorGetVChromanance.
Для рисования линий и многоугольников используются функции moveTo, lineTo, closePath, strokePath. При этом функции stroke и fill задают цвет линий и заливки. Функция strokeWeight задаёт толщину линий. Вот пример рисования красного треугольника с чёрным контуром:
-fill("red");
-stroke("black");
+fill(COLOR_RED);
+stroke(COLOR_BLACK);
strokeWidth(10);
moveTo(100, 300);
lineTo(300, 300);
@@ -71,6 +79,15 @@ closePath();
Функции:
+unsigned int colorWithAlpha(unsigned int colorCode, double a);
+
+Функция добавляет прозрачность (alpha) к цвету с указанным кодом. значения альфа-канала из цвета (из colorCode) умножается на заданное значение альфа (a). Возвращает код для полученного цвета.
+
+Параметры:
+
+colorCode — код цвета;
+a — альфа-канал, степень непрозрачности от 0 до 1, где 0 — полностью прозрачный, 1 — полностью непрозрачный.
+
unsigned int colorByName(const char *colorName);
Функция генерирует код цвета по его текстовому наименованию в соответствии с CSS3.
@@ -98,7 +115,7 @@ closePath();
unsigned int colorByNameA(const char *colorName, double a);
-Генерирует код цвета по его текстовому наименованию с применением прозрачности (alpha). См. также colorByName. Если в текстовом наименовании уже заключён цвет с прозрачностью (alpha) то значения альфа-канала будут перемножены.
+Генерирует код цвета по его текстовому наименованию с применением прозрачности (alpha). См. также colorByName, colorWithAlpha. Если в текстовом наименовании уже заключён цвет с прозрачностью (alpha) то значения альфа-канала будут перемножены.
Параметры:
@@ -117,7 +134,7 @@ closePath();
unsigned int colorByRGBA(double r, double g, double b, double a);
-Генерирует код цвета по трём цветовым составляющим — красный, зелёный, синий — и прозрачности — альфа-канал. См. также colorByRGB.
+Генерирует код цвета по трём цветовым составляющим — красный, зелёный, синий — и прозрачности — альфа-канал. См. также colorByRGB, colorWithAlpha.
Параметры:
@@ -138,7 +155,7 @@ closePath();
unsigned int colorByHSVA(double h, double s, double v, double a);
-Генерирует код цвета по трём составляющим в системе HSV — оттенок (hue), цветность (saturation), яркость (value) — и прозрачности (alpha). См. также colorByHSV.
+Генерирует код цвета по трём составляющим в системе HSV — оттенок (hue), цветность (saturation), яркость (value) — и прозрачности (alpha). См. также colorByHSV, colorWithAlpha.
Параметры:
@@ -159,7 +176,7 @@ closePath();
unsigned int colorByYUVA(double y, double u, double v, double a);
-Генерирует код цвета по трём составляющим в системе YUV и прозрачности. См. также colorByYUV.
+Генерирует код цвета по трём составляющим в системе YUV и прозрачности. См. также colorByYUV, colorWithAlpha.
Параметры:
diff --git a/doc/ru/functions.html b/doc/ru/functions.html
index 83f6e3e..5d61574 100644
--- a/doc/ru/functions.html
+++ b/doc/ru/functions.html
@@ -78,6 +78,7 @@
keyEventGetCount
keyEventGet
Рисование
+colorWithAlpha
colorByName
colorByNameA
colorByRGB
diff --git a/src/SConstruct b/src/SConstruct
index 3f7a557..3df6842 100644
--- a/src/SConstruct
+++ b/src/SConstruct
@@ -38,6 +38,7 @@ target = name
headers = [
'animation.h',
'common.h',
+ 'colors.h',
'drawing.h',
'font.h',
'framebuffer.h',
diff --git a/src/colors.h b/src/colors.h
new file mode 100644
index 0000000..1480a34
--- /dev/null
+++ b/src/colors.h
@@ -0,0 +1,155 @@
+#ifndef HELI_COLORS_H
+#define HELI_COLORS_H
+
+
+#define COLOR_ALICEBLUE 0xf0f8ffff
+#define COLOR_ANTIQUEWHITE 0xfaebd7ff
+#define COLOR_AQUA 0x00ffffff
+#define COLOR_AQUAMARINE 0x7fffd4ff
+#define COLOR_AZURE 0xf0ffffff
+#define COLOR_BEIGE 0xf5f5dcff
+#define COLOR_BISQUE 0xffe4c4ff
+#define COLOR_BLACK 0x000000ff
+#define COLOR_BLANCHEDALMOND 0xffebcdff
+#define COLOR_BLUE 0x0000ffff
+#define COLOR_BLUEVIOLET 0x8a2be2ff
+#define COLOR_BROWN 0xa52a2aff
+#define COLOR_BURLYWOOD 0xdeb887ff
+#define COLOR_CADETBLUE 0x5f9ea0ff
+#define COLOR_CHARTREUSE 0x7fff00ff
+#define COLOR_CHOCOLATE 0xd2691eff
+#define COLOR_CORAL 0xff7f50ff
+#define COLOR_CORNFLOWERBLUE 0x6495edff
+#define COLOR_CORNSILK 0xfff8dcff
+#define COLOR_CRIMSON 0xdc143cff
+#define COLOR_CYAN 0x00ffffff
+#define COLOR_DARKBLUE 0x00008bff
+#define COLOR_DARKCYAN 0x008b8bff
+#define COLOR_DARKGOLDENROD 0xb8860bff
+#define COLOR_DARKGRAY 0xa9a9a9ff
+#define COLOR_DARKGREEN 0x006400ff
+#define COLOR_DARKGREY 0xa9a9a9ff
+#define COLOR_DARKKHAKI 0xbdb76bff
+#define COLOR_DARKMAGENTA 0x8b008bff
+#define COLOR_DARKOLIVEGREEN 0x556b2fff
+#define COLOR_DARKORANGE 0xff8c00ff
+#define COLOR_DARKORCHID 0x9932ccff
+#define COLOR_DARKRED 0x8b0000ff
+#define COLOR_DARKSALMON 0xe9967aff
+#define COLOR_DARKSEAGREEN 0x8fbc8fff
+#define COLOR_DARKSLATEBLUE 0x483d8bff
+#define COLOR_DARKSLATEGRAY 0x2f4f4fff
+#define COLOR_DARKSLATEGREY 0x2f4f4fff
+#define COLOR_DARKTURQUOISE 0x00ced1ff
+#define COLOR_DARKVIOLET 0x9400d3ff
+#define COLOR_DEEPPINK 0xff1493ff
+#define COLOR_DEEPSKYBLUE 0x00bfffff
+#define COLOR_DIMGRAY 0x696969ff
+#define COLOR_DODGERBLUE 0x1e90ffff
+#define COLOR_FIREBRICK 0xb22222ff
+#define COLOR_FLORALWHITE 0xfffaf0ff
+#define COLOR_FORESTGREEN 0x228b22ff
+#define COLOR_FUCHSIA 0xff00ffff
+#define COLOR_GAINSBORO 0xdcdcdcff
+#define COLOR_GHOSTWHITE 0xf8f8ffff
+#define COLOR_GOLD 0xffd700ff
+#define COLOR_GOLDENROD 0xdaa520ff
+#define COLOR_GRAY 0x808080ff
+#define COLOR_GREEN 0x008000ff
+#define COLOR_GREENYELLOW 0xadff2fff
+#define COLOR_GREY 0x808080ff
+#define COLOR_HONEYDEW 0xf0fff0ff
+#define COLOR_HOTPINK 0xff69b4ff
+#define COLOR_INDIANRED 0xcd5c5cff
+#define COLOR_INDIGO 0x4b0082ff
+#define COLOR_IVORY 0xfffff0ff
+#define COLOR_KHAKI 0xf0e68cff
+#define COLOR_LAVENDER 0xe6e6faff
+#define COLOR_LAVENDERBLUSH 0xfff0f5ff
+#define COLOR_LAWNGREEN 0x7cfc00ff
+#define COLOR_LEMONCHIFFON 0xfffacdff
+#define COLOR_LIGHTBLUE 0xadd8e6ff
+#define COLOR_LIGHTCORAL 0xf08080ff
+#define COLOR_LIGHTCYAN 0xe0ffffff
+#define COLOR_LIGHTGOLDENRODYELLOW 0xfafad2ff
+#define COLOR_LIGHTGRAY 0xd3d3d3ff
+#define COLOR_LIGHTGREEN 0x90ee90ff
+#define COLOR_LIGHTGREY 0xd3d3d3ff
+#define COLOR_LIGHTPINK 0xffb6c1ff
+#define COLOR_LIGHTSALMON 0xffa07aff
+#define COLOR_LIGHTSEAGREEN 0x20b2aaff
+#define COLOR_LIGHTSKYBLUE 0x87cefaff
+#define COLOR_LIGHTSLATEGRAY 0x778899ff
+#define COLOR_LIGHTSLATEGREY 0x778899ff
+#define COLOR_LIGHTSTEELBLUE 0xb0c4deff
+#define COLOR_LIGHTYELLOW 0xffffe0ff
+#define COLOR_LIME 0x00ff00ff
+#define COLOR_LIMEGREEN 0x32cd32ff
+#define COLOR_LINEN 0xfaf0e6ff
+#define COLOR_MAGENTA 0xff00ffff
+#define COLOR_MAROON 0x800000ff
+#define COLOR_MEDIUMAQUAMARINE 0x66cdaaff
+#define COLOR_MEDIUMBLUE 0x0000cdff
+#define COLOR_MEDIUMORCHID 0xba55d3ff
+#define COLOR_MEDIUMPURPLE 0x9370dbff
+#define COLOR_MEDIUMSEAGREEN 0x3cb371ff
+#define COLOR_MEDIUMSLATEBLUE 0x7b68eeff
+#define COLOR_MEDIUMSPRINGGREEN 0x00fa9aff
+#define COLOR_MEDIUMTURQUOISE 0x48d1ccff
+#define COLOR_MEDIUMVIOLETRED 0xc71585ff
+#define COLOR_MIDNIGHTBLUE 0x191970ff
+#define COLOR_MINTCREAM 0xf5fffaff
+#define COLOR_MISTYROSE 0xffe4e1ff
+#define COLOR_MOCCASIN 0xffe4b5ff
+#define COLOR_NAVAJOWHITE 0xffdeadff
+#define COLOR_NAVY 0x000080ff
+#define COLOR_OLDLACE 0xfdf5e6ff
+#define COLOR_OLIVE 0x808000ff
+#define COLOR_OLIVEDRAB 0x6b8e23ff
+#define COLOR_ORANGE 0xffa500ff
+#define COLOR_ORANGERED 0xff4500ff
+#define COLOR_ORCHID 0xda70d6ff
+#define COLOR_PALEGOLDENROD 0xeee8aaff
+#define COLOR_PALEGREEN 0x98fb98ff
+#define COLOR_PALETURQUOISE 0xafeeeeff
+#define COLOR_PALEVIOLETRED 0xdb7093ff
+#define COLOR_PAPAYAWHIP 0xffefd5ff
+#define COLOR_PEACHPUFF 0xffdab9ff
+#define COLOR_PERU 0xcd853fff
+#define COLOR_PINK 0xffc0cbff
+#define COLOR_PLUM 0xdda0ddff
+#define COLOR_POWDERBLUE 0xb0e0e6ff
+#define COLOR_PURPLE 0x800080ff
+#define COLOR_REBECCAPURPLE 0x663399ff
+#define COLOR_RED 0xff0000ff
+#define COLOR_ROSYBROWN 0xbc8f8fff
+#define COLOR_ROYALBLUE 0x4169e1ff
+#define COLOR_SADDLEBROWN 0x8b4513ff
+#define COLOR_SALMON 0xfa8072ff
+#define COLOR_SANDYBROWN 0xf4a460ff
+#define COLOR_SEAGREEN 0x2e8b57ff
+#define COLOR_SEASHELL 0xfff5eeff
+#define COLOR_SIENNA 0xa0522dff
+#define COLOR_SILVER 0xc0c0c0ff
+#define COLOR_SKYBLUE 0x87ceebff
+#define COLOR_SLATEBLUE 0x6a5acdff
+#define COLOR_SLATEGRAY 0x708090ff
+#define COLOR_SLATEGREY 0x708090ff
+#define COLOR_SNOW 0xfffafaff
+#define COLOR_SPRINGGREEN 0x00ff7fff
+#define COLOR_STEELBLUE 0x4682b4ff
+#define COLOR_TAN 0xd2b48cff
+#define COLOR_TEAL 0x008080ff
+#define COLOR_THISTLE 0xd8bfd8ff
+#define COLOR_TOMATO 0xff6347ff
+#define COLOR_TURQUOISE 0x40e0d0ff
+#define COLOR_VIOLET 0xee82eeff
+#define COLOR_WHEAT 0xf5deb3ff
+#define COLOR_WHITE 0xffffffff
+#define COLOR_WHITESMOKE 0xf5f5f5ff
+#define COLOR_YELLOW 0xffff00ff
+#define COLOR_YELLOWGREEN 0x9acd32ff
+#define COLOR_TRANSPARENT 0x00000000
+
+
+#endif
diff --git a/src/colors.inc.h b/src/colors.inc.h
index 61423e9..1758cf2 100644
--- a/src/colors.inc.h
+++ b/src/colors.inc.h
@@ -1,152 +1,156 @@
-static char *colors[][2] = {
- { "aliceblue" , "#F0F8FF" },
- { "antiquewhite" , "#FAEBD7" },
- { "aqua" , "#00FFFF" },
- { "aquamarine" , "#7FFFD4" },
- { "azure" , "#F0FFFF" },
- { "beige" , "#F5F5DC" },
- { "bisque" , "#FFE4C4" },
- { "black" , "#000000" },
- { "blanchedalmond" , "#FFEBCD" },
- { "blue" , "#0000FF" },
- { "blueviolet" , "#8A2BE2" },
- { "brown" , "#A52A2A" },
- { "burlywood" , "#DEB887" },
- { "cadetblue" , "#5F9EA0" },
- { "chartreuse" , "#7FFF00" },
- { "chocolate" , "#D2691E" },
- { "coral" , "#FF7F50" },
- { "cornflowerblue" , "#6495ED" },
- { "cornsilk" , "#FFF8DC" },
- { "crimson" , "#DC143C" },
- { "cyan" , "#00FFFF" },
- { "darkblue" , "#00008B" },
- { "darkcyan" , "#008B8B" },
- { "darkgoldenrod" , "#B8860B" },
- { "darkgray" , "#A9A9A9" },
- { "darkgreen" , "#006400" },
- { "darkgrey" , "#A9A9A9" },
- { "darkkhaki" , "#BDB76B" },
- { "darkmagenta" , "#8B008B" },
- { "darkolivegreen" , "#556B2F" },
- { "darkorange" , "#FF8C00" },
- { "darkorchid" , "#9932CC" },
- { "darkred" , "#8B0000" },
- { "darksalmon" , "#E9967A" },
- { "darkseagreen" , "#8FBC8F" },
- { "darkslateblue" , "#483D8B" },
- { "darkslategray" , "#2F4F4F" },
- { "darkslategrey" , "#2F4F4F" },
- { "darkturquoise" , "#00CED1" },
- { "darkviolet" , "#9400D3" },
- { "deeppink" , "#FF1493" },
- { "deepskyblue" , "#00BFFF" },
- { "dimgray" , "#696969" },
- { "dodgerblue" , "#1E90FF" },
- { "firebrick" , "#B22222" },
- { "floralwhite" , "#FFFAF0" },
- { "forestgreen" , "#228B22" },
- { "fuchsia" , "#FF00FF" },
- { "gainsboro" , "#DCDCDC" },
- { "ghostwhite" , "#F8F8FF" },
- { "gold" , "#FFD700" },
- { "goldenrod" , "#DAA520" },
- { "gray" , "#808080" },
- { "green" , "#008000" },
- { "greenyellow" , "#ADFF2F" },
- { "grey" , "#808080" },
- { "honeydew" , "#F0FFF0" },
- { "hotpink" , "#FF69B4" },
- { "indianred" , "#CD5C5C" },
- { "indigo" , "#4B0082" },
- { "ivory" , "#FFFFF0" },
- { "khaki" , "#F0E68C" },
- { "lavender" , "#E6E6FA" },
- { "lavenderblush" , "#FFF0F5" },
- { "lawngreen" , "#7CFC00" },
- { "lemonchiffon" , "#FFFACD" },
- { "lightblue" , "#ADD8E6" },
- { "lightcoral" , "#F08080" },
- { "lightcyan" , "#E0FFFF" },
- { "lightgoldenrodyellow" , "#FAFAD2" },
- { "lightgray" , "#D3D3D3" },
- { "lightgreen" , "#90EE90" },
- { "lightgrey" , "#D3D3D3" },
- { "lightpink" , "#FFB6C1" },
- { "lightsalmon" , "#FFA07A" },
- { "lightseagreen" , "#20B2AA" },
- { "lightskyblue" , "#87CEFA" },
- { "lightslategray" , "#778899" },
- { "lightslategrey" , "#778899" },
- { "lightsteelblue" , "#B0C4DE" },
- { "lightyellow" , "#FFFFE0" },
- { "lime" , "#00FF00" },
- { "limegreen" , "#32CD32" },
- { "linen" , "#FAF0E6" },
- { "magenta" , "#FF00FF" },
- { "maroon" , "#800000" },
- { "mediumaquamarine" , "#66CDAA" },
- { "mediumblue" , "#0000CD" },
- { "mediumorchid" , "#BA55D3" },
- { "mediumpurple" , "#9370DB" },
- { "mediumseagreen" , "#3CB371" },
- { "mediumslateblue" , "#7B68EE" },
- { "mediumspringgreen" , "#00FA9A" },
- { "mediumturquoise" , "#48D1CC" },
- { "mediumvioletred" , "#C71585" },
- { "midnightblue" , "#191970" },
- { "mintcream" , "#F5FFFA" },
- { "mistyrose" , "#FFE4E1" },
- { "moccasin" , "#FFE4B5" },
- { "navajowhite" , "#FFDEAD" },
- { "navy" , "#000080" },
- { "oldlace" , "#FDF5E6" },
- { "olive" , "#808000" },
- { "olivedrab" , "#6B8E23" },
- { "orange" , "#FFA500" },
- { "orangered" , "#FF4500" },
- { "orchid" , "#DA70D6" },
- { "palegoldenrod" , "#EEE8AA" },
- { "palegreen" , "#98FB98" },
- { "paleturquoise" , "#AFEEEE" },
- { "palevioletred" , "#DB7093" },
- { "papayawhip" , "#FFEFD5" },
- { "peachpuff" , "#FFDAB9" },
- { "peru" , "#CD853F" },
- { "pink" , "#FFC0CB" },
- { "plum" , "#DDA0DD" },
- { "powderblue" , "#B0E0E6" },
- { "purple" , "#800080" },
- { "rebeccapurple" , "#663399" },
- { "red" , "#FF0000" },
- { "rosybrown" , "#BC8F8F" },
- { "royalblue" , "#4169E1" },
- { "saddlebrown" , "#8B4513" },
- { "salmon" , "#FA8072" },
- { "sandybrown" , "#F4A460" },
- { "seagreen" , "#2E8B57" },
- { "seashell" , "#FFF5EE" },
- { "sienna" , "#A0522D" },
- { "silver" , "#C0C0C0" },
- { "skyblue" , "#87CEEB" },
- { "slateblue" , "#6A5ACD" },
- { "slategray" , "#708090" },
- { "slategrey" , "#708090" },
- { "snow" , "#FFFAFA" },
- { "springgreen" , "#00FF7F" },
- { "steelblue" , "#4682B4" },
- { "tan" , "#D2B48C" },
- { "teal" , "#008080" },
- { "thistle" , "#D8BFD8" },
- { "tomato" , "#FF6347" },
- { "turquoise" , "#40E0D0" },
- { "violet" , "#EE82EE" },
- { "wheat" , "#F5DEB3" },
- { "white" , "#FFFFFF" },
- { "whitesmoke" , "#F5F5F5" },
- { "yellow" , "#FFFF00" },
- { "yellowgreen" , "#9ACD32" },
- { "transparent" , "0 0 0 0" }
+static const struct {
+ const char* name;
+ unsigned int code;
+} colors[] = {
+ { "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 },
+ { "darkgrey" , 0xa9a9a9ff },
+ { "darkkhaki" , 0xbdb76bff },
+ { "darkmagenta" , 0x8b008bff },
+ { "darkolivegreen" , 0x556b2fff },
+ { "darkorange" , 0xff8c00ff },
+ { "darkorchid" , 0x9932ccff },
+ { "darkred" , 0x8b0000ff },
+ { "darksalmon" , 0xe9967aff },
+ { "darkseagreen" , 0x8fbc8fff },
+ { "darkslateblue" , 0x483d8bff },
+ { "darkslategray" , 0x2f4f4fff },
+ { "darkslategrey" , 0x2f4f4fff },
+ { "darkturquoise" , 0x00ced1ff },
+ { "darkviolet" , 0x9400d3ff },
+ { "deeppink" , 0xff1493ff },
+ { "deepskyblue" , 0x00bfffff },
+ { "dimgray" , 0x696969ff },
+ { "dodgerblue" , 0x1e90ffff },
+ { "firebrick" , 0xb22222ff },
+ { "floralwhite" , 0xfffaf0ff },
+ { "forestgreen" , 0x228b22ff },
+ { "fuchsia" , 0xff00ffff },
+ { "gainsboro" , 0xdcdcdcff },
+ { "ghostwhite" , 0xf8f8ffff },
+ { "gold" , 0xffd700ff },
+ { "goldenrod" , 0xdaa520ff },
+ { "gray" , 0x808080ff },
+ { "green" , 0x008000ff },
+ { "greenyellow" , 0xadff2fff },
+ { "grey" , 0x808080ff },
+ { "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 },
+ { "lightgray" , 0xd3d3d3ff },
+ { "lightgreen" , 0x90ee90ff },
+ { "lightgrey" , 0xd3d3d3ff },
+ { "lightpink" , 0xffb6c1ff },
+ { "lightsalmon" , 0xffa07aff },
+ { "lightseagreen" , 0x20b2aaff },
+ { "lightskyblue" , 0x87cefaff },
+ { "lightslategray" , 0x778899ff },
+ { "lightslategrey" , 0x778899ff },
+ { "lightsteelblue" , 0xb0c4deff },
+ { "lightyellow" , 0xffffe0ff },
+ { "lime" , 0x00ff00ff },
+ { "limegreen" , 0x32cd32ff },
+ { "linen" , 0xfaf0e6ff },
+ { "magenta" , 0xff00ffff },
+ { "maroon" , 0x800000ff },
+ { "mediumaquamarine" , 0x66cdaaff },
+ { "mediumblue" , 0x0000cdff },
+ { "mediumorchid" , 0xba55d3ff },
+ { "mediumpurple" , 0x9370dbff },
+ { "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" , 0xdb7093ff },
+ { "papayawhip" , 0xffefd5ff },
+ { "peachpuff" , 0xffdab9ff },
+ { "peru" , 0xcd853fff },
+ { "pink" , 0xffc0cbff },
+ { "plum" , 0xdda0ddff },
+ { "powderblue" , 0xb0e0e6ff },
+ { "purple" , 0x800080ff },
+ { "rebeccapurple" , 0x663399ff },
+ { "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 },
+ { "slategrey" , 0x708090ff },
+ { "snow" , 0xfffafaff },
+ { "springgreen" , 0x00ff7fff },
+ { "steelblue" , 0x4682b4ff },
+ { "tan" , 0xd2b48cff },
+ { "teal" , 0x008080ff },
+ { "thistle" , 0xd8bfd8ff },
+ { "tomato" , 0xff6347ff },
+ { "turquoise" , 0x40e0d0ff },
+ { "violet" , 0xee82eeff },
+ { "wheat" , 0xf5deb3ff },
+ { "white" , 0xffffffff },
+ { "whitesmoke" , 0xf5f5f5ff },
+ { "yellow" , 0xffff00ff },
+ { "yellowgreen" , 0x9acd32ff },
+ { "transparent" , 0x00000000 }
};
+
diff --git a/src/common.c b/src/common.c
index d32b7a4..d6daf84 100644
--- a/src/common.c
+++ b/src/common.c
@@ -161,12 +161,15 @@ static double colorClamp(double c)
static unsigned int colorToInt(double c)
{ return (unsigned int)floor(colorClamp(c)*255.99); }
+unsigned int colorWithAlpha(unsigned int colorCode, double a)
+ { return (0xffffff00 & colorCode) | colorToInt(colorGetAlpha(colorCode)*a); }
unsigned int colorByRGBA(double r, double g, double b, double a) {
return (colorToInt(r) << 24)
| (colorToInt(g) << 16)
| (colorToInt(b) << 8)
| colorToInt(a);
}
+
unsigned int colorByYUVA(double y, double u, double v, double a) {
return colorByRGBA(
yuvToRgb[0][0]*y + yuvToRgb[0][1]*u + yuvToRgb[0][2]*v,
@@ -267,9 +270,9 @@ double colorGetValue(unsigned int colorCode) {
}
-unsigned int colorByName(const char *colorName)
- { return colorByNameA(colorName, 1); }
-unsigned int colorByNameA(const char *colorName, double a) {
+unsigned int colorByNameA(const char *colorName, double a)
+ { return colorWithAlpha(colorByName(colorName), a); }
+unsigned int colorByName(const char *colorName) {
unsigned int code = 0;
const char *x = colorName;
@@ -283,17 +286,17 @@ unsigned int colorByNameA(const char *colorName, double a) {
}
for(int i = 0; i < 6; ++i)
code |= ( hex[i] << ((7-i)*4) );
- code |= colorToInt( a*(hex[6]*16 + hex[7])/255.0 );
+ code |= colorToInt( (hex[6]*16 + hex[7])/255.0 );
} else
if (isalpha(*x)) {
int count = (int)(sizeof(colors)/sizeof(*colors));
for(int i = 0; i < count; ++i)
- if (heliStringCompareCi(x, colors[i][0]) == 0)
- return colorByNameA(colors[i][1], a);
+ if (heliStringCompareCi(x, colors[i].name) == 0)
+ return colors[i].code;
} else {
- double r = 0, g = 0, b = 0, aa = 1;
- sscanf(x, "%lf %lf %lf %lf", &r, &g, &b, &aa);
- code = colorByRGBA(r, g, b, aa*a);
+ double r = 0, g = 0, b = 0, a = 1;
+ sscanf(x, "%lf %lf %lf %lf", &r, &g, &b, &a);
+ code = colorByRGBA(r, g, b, a);
}
return code;
}
diff --git a/src/drawing.c b/src/drawing.c
index 517aa0c..33eb7b1 100644
--- a/src/drawing.c
+++ b/src/drawing.c
@@ -803,9 +803,9 @@ void resetState()
{ resetStateEx(STATE_ALL); }
void resetStateEx(unsigned int flags) {
- if (flags & STATE_FILL_COLOR ) fill(colorByRGBA(1, 1, 1, 1));
+ if (flags & STATE_FILL_COLOR ) fill(COLOR_WHITE);
if (flags & STATE_FILL_TEXTURE ) noFillTexture();
- if (flags & STATE_STROKE_COLOR ) stroke(colorByRGBA(0, 0, 0, 1));
+ if (flags & STATE_STROKE_COLOR ) stroke(COLOR_BLACK);
if (flags & STATE_STROKE_TEXTURE ) noStrokeTexture();
if (flags & STATE_STROKE_WIDTH ) strokeWidth(1);
if (flags & STATE_TEXT_ALIGN ) textAlign(HALIGN_LEFT, VALIGN_TOP);
@@ -813,7 +813,7 @@ void resetStateEx(unsigned int flags) {
if (flags & STATE_TARGET_FRAMEBUFFER) targetEx(NULL, FALSE, FALSE);
if (flags & STATE_TARGET_VIEWPORT ) viewportByWindow();
if (flags & STATE_TARGET_PROJECTION ) projectionByViewport();
- if (flags & STATE_BACKGROUND ) background(colorByRGBA(1, 1, 1, 1));
+ if (flags & STATE_BACKGROUND ) background(COLOR_WHITE);
if (flags & STATE_TRANSFORM ) noTransform();
if (flags & STATE_CLIP ) noClip();
}
diff --git a/src/drawing.h b/src/drawing.h
index 8a1abf9..49a9058 100644
--- a/src/drawing.h
+++ b/src/drawing.h
@@ -3,6 +3,7 @@
#include "common.h"
+#include "colors.h"
#include "animation.h"
@@ -83,6 +84,8 @@ void saveStateEx(unsigned int flags);
void restoreState();
+unsigned int colorWithAlpha(unsigned int colorCode, double a);
+
unsigned int colorByName(const char *colorName);
unsigned int colorByNameA(const char *colorName, double a);
unsigned int colorByRGB(double r, double g, double b);
diff --git a/src/helianthus.h b/src/helianthus.h
index 8495d98..829454d 100644
--- a/src/helianthus.h
+++ b/src/helianthus.h
@@ -9,6 +9,7 @@ extern "C" {
#include "helianthus/common.h"
#include "helianthus/world.h"
+#include "helianthus/colors.h"
#include "helianthus/drawing.h"
#include "helianthus/font.h"
#include "helianthus/animation.h"
diff --git a/src/worldui.c b/src/worldui.c
index faf62a0..ad62215 100644
--- a/src/worldui.c
+++ b/src/worldui.c
@@ -170,10 +170,10 @@ static void draw(HeliDialog *dialog) {
const double br1 = w - border + 2;
const double bl1 = br1 - bw;
- unsigned int strokeColor = colorByName("white");
- unsigned int fillColor = colorByName("0.3 0.3 0.3");
- unsigned int selTextColor = colorByName("black");
- unsigned int selFillColor = colorByName("white");
+ unsigned int strokeColor = COLOR_WHITE;
+ unsigned int fillColor = 0x4d4d4dff;
+ unsigned int selTextColor = COLOR_BLACK;
+ unsigned int selFillColor = COLOR_WHITE;
strokeWidth(1);
textFontDefault();
textSize(16);