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);