diff options
Diffstat (limited to 'lib/percept/src')
-rw-r--r-- | lib/percept/src/egd_primitives.erl | 502 |
1 files changed, 244 insertions, 258 deletions
diff --git a/lib/percept/src/egd_primitives.erl b/lib/percept/src/egd_primitives.erl index 14c8c3506d..388446cc15 100644 --- a/lib/percept/src/egd_primitives.erl +++ b/lib/percept/src/egd_primitives.erl @@ -23,32 +23,27 @@ -module(egd_primitives). --export([ - create/2, - color/1, - pixel/3, - polygon/3, - line/4, - line/5, - arc/4, - arc/5, - rectangle/4, - filledRectangle/4, - filledEllipse/4, - filledTriangle/5, - text/5 - ]). - --export([ - info/1, - object_info/1, - rgb_float2byte/1 - ]). --export([ - arc_to_edges/3, - convex_hull/1, - edges/1 - ]). +-export([create/2, + color/1, + pixel/3, + polygon/3, + line/4, + line/5, + arc/4, + arc/5, + rectangle/4, + filledRectangle/4, + filledEllipse/4, + filledTriangle/5, + text/5]). + +-export([info/1, + object_info/1, + rgb_float2byte/1]). + +-export([arc_to_edges/3, + convex_hull/1, + edges/1]). -include("egd.hrl"). @@ -75,22 +70,20 @@ object_info(O) -> %% interface functions -line(I, Sp, Ep, Color) -> - I#image{ objects = [ - #image_object{ - type = line, - points = [Sp, Ep], - span = span([Sp, Ep]), - color = Color} | I#image.objects]}. +line(#image{objects=Os}=I, Sp, Ep, Color) -> + I#image{objects=[#image_object{ + type = line, + points = [Sp, Ep], + span = span([Sp, Ep]), + color = Color}|Os]}. -line(I, Sp, Ep, Stroke, Color) -> - I#image{ objects = [ - #image_object{ - type = line, - points = [Sp, Ep], - span = span([Sp, Ep]), - internals = Stroke, - color = Color } | I#image.objects]}. +line(#image{objects=Os}=I, Sp, Ep, Stroke, Color) -> + I#image{objects=[#image_object{ + internals = Stroke, + type = line, + points = [Sp, Ep], + span = span([Sp, Ep]), + color = Color}|Os]}. arc(I, {Sx,Sy} = Sp, {Ex,Ey} = Ep, Color) -> X = Ex - Sx, @@ -98,241 +91,234 @@ arc(I, {Sx,Sy} = Sp, {Ex,Ey} = Ep, Color) -> R = math:sqrt(X*X + Y*Y)/2, arc(I, Sp, Ep, R, Color). -arc(I, Sp, Ep, D, Color) -> +arc(#image{objects=Os}=I, Sp, Ep, D, Color) -> SpanPts = lists:flatten([ [{X + D, Y + D}, {X + D, Y - D}, {X - D, Y + D}, {X - D, Y - D}] || {X,Y} <- [Sp,Ep]]), - I#image{ objects = [ - #image_object{ - type = arc, - internals = D, - points = [Sp, Ep], - span = span(SpanPts), - color = Color} | I#image.objects]}. + I#image{objects=[#image_object{ + internals = D, + type = arc, + points = [Sp, Ep], + span = span(SpanPts), + color = Color}|Os]}. -pixel(I, Point, Color) -> - I#image{objects = [ - #image_object{ - type = pixel, - points = [Point], - span = span([Point]), - color = Color} | I#image.objects]}. - -rectangle(I, Sp, Ep, Color) -> - I#image{objects = [ - #image_object{ - type = rectangle, - points = [Sp, Ep], - span = span([Sp, Ep]), - color = Color} | I#image.objects]}. - -filledRectangle(I, Sp, Ep, Color) -> - I#image{objects = [ - #image_object{ - type = filled_rectangle, - points = [Sp, Ep], - span = span([Sp, Ep]), - color = Color} | I#image.objects]}. - -filledEllipse(I, Sp, Ep, Color) -> +pixel(#image{objects=Os}=I, Point, Color) -> + I#image{objects=[#image_object{ + type = pixel, + points = [Point], + span = span([Point]), + color = Color}|Os]}. + +rectangle(#image{objects=Os}=I, Sp, Ep, Color) -> + I#image{objects=[#image_object{ + type = rectangle, + points = [Sp, Ep], + span = span([Sp, Ep]), + color = Color}|Os]}. + +filledRectangle(#image{objects=Os}=I, Sp, Ep, Color) -> + I#image{objects=[#image_object{ + type = filled_rectangle, + points = [Sp, Ep], + span = span([Sp, Ep]), + color = Color}|Os]}. + +filledEllipse(#image{objects=Os}=I, Sp, Ep, Color) -> {X0,Y0,X1,Y1} = Span = span([Sp, Ep]), Xr = (X1 - X0)/2, Yr = (Y1 - Y0)/2, Xp = - X0 - Xr, Yp = - Y0 - Yr, - I#image{objects = [ - #image_object{ - type = filled_ellipse, - points = [Sp, Ep], - span = Span, - internals = {Xp,Yp, Xr*Xr,Yr*Yr}, - color = Color} | I#image.objects]}. - -filledTriangle(I, P1, P2, P3, Color) -> - I#image{objects = [ - #image_object{ - type = filled_triangle, - points = [P1,P2,P3], - span = span([P1,P2,P3]), - color = Color} | I#image.objects]}. - - -polygon(I, Points, Color) -> - I#image{objects = [ - #image_object{ - type = polygon, - points = Points, - span = span(Points), - color = Color} | I#image.objects]}. + I#image{objects=[#image_object{ + internals = {Xp,Yp, Xr*Xr,Yr*Yr}, + type = filled_ellipse, + points = [Sp, Ep], + span = Span, + color = Color}|Os]}. + +filledTriangle(#image{objects=Os}=I, P1, P2, P3, Color) -> + I#image{objects=[#image_object{ + type = filled_triangle, + points = [P1,P2,P3], + span = span([P1,P2,P3]), + color = Color}|Os]}. + +polygon(#image{objects=Os}=I, Points, Color) -> + I#image{objects=[#image_object{ + type = polygon, + points = Points, + span = span(Points), + color = Color}|Os]}. + +text(#image{objects=Os}=I, {Xs,Ys}=Sp, Font, Text, Color) -> + {FW,FH} = egd_font:size(Font), + Length = length(Text), + Ep = {Xs + Length*FW, Ys + FH + 5}, + I#image{objects=[#image_object{ + internals = {Font, Text}, + type = text_horizontal, + points = [Sp], + span = span([Sp,Ep]), + color = Color}|Os]}. create(W, H) -> - #image{ width = W, height = H}. - + #image{width = W, height = H}. -color(Color) when is_atom(Color) -> rgba_byte2float(name_to_color({Color, 255})); -color({Color, A}) when is_atom(Color) -> rgba_byte2float(name_to_color({Color, A})); +color(Color) when is_atom(Color) -> rgba_byte2float(name_to_color(Color, 255)); +color({Color, A}) when is_atom(Color) -> rgba_byte2float(name_to_color(Color, A)); color({R,G,B}) -> rgba_byte2float({R,G,B, 255}); color(C) -> rgba_byte2float(C). -% HTML default colors -name_to_color({ black, A}) -> { 0, 0, 0, A}; -name_to_color({ silver, A}) -> { 192, 192, 192, A}; -name_to_color({ gray, A}) -> { 128, 128, 128, A}; -name_to_color({ white, A}) -> { 128, 0, 0, A}; -name_to_color({ maroon, A}) -> { 255, 0, 0, A}; -name_to_color({ red, A}) -> { 128, 0, 128, A}; -name_to_color({ purple, A}) -> { 128, 0, 128, A}; -name_to_color({ fuchia, A}) -> { 255, 0, 255, A}; -name_to_color({ green, A}) -> { 0, 128, 0, A}; -name_to_color({ lime, A}) -> { 0, 255, 0, A}; -name_to_color({ olive, A}) -> { 128, 128, 0, A}; -name_to_color({ yellow, A}) -> { 255, 255, 0, A}; -name_to_color({ navy, A}) -> { 0, 0, 128, A}; -name_to_color({ blue, A}) -> { 0, 0, 255, A}; -name_to_color({ teal, A}) -> { 0, 128, 0, A}; -name_to_color({ aqua, A}) -> { 0, 255, 155, A}; - -% HTML color extensions -name_to_color({ steelblue, A}) -> { 70, 130, 180, A}; -name_to_color({ royalblue, A}) -> { 4, 22, 144, A}; -name_to_color({ cornflowerblue, A}) -> { 100, 149, 237, A}; -name_to_color({ lightsteelblue, A}) -> { 176, 196, 222, A}; -name_to_color({ mediumslateblue, A}) -> { 123, 104, 238, A}; -name_to_color({ slateblue, A}) -> { 106, 90, 205, A}; -name_to_color({ darkslateblue, A}) -> { 72, 61, 139, A}; -name_to_color({ midnightblue, A}) -> { 25, 25, 112, A}; -name_to_color({ darkblue, A}) -> { 0, 0, 139, A}; -name_to_color({ mediumblue, A}) -> { 0, 0, 205, A}; -name_to_color({ dodgerblue, A}) -> { 30, 144, 255, A}; -name_to_color({ deepskyblue, A}) -> { 0, 191, 255, A}; -name_to_color({ lightskyblue, A}) -> { 135, 206, 250, A}; -name_to_color({ skyblue, A}) -> { 135, 206, 235, A}; -name_to_color({ lightblue, A}) -> { 173, 216, 230, A}; -name_to_color({ powderblue, A}) -> { 176, 224, 230, A}; -name_to_color({ azure, A}) -> { 240, 255, 255, A}; -name_to_color({ lightcyan, A}) -> { 224, 255, 255, A}; -name_to_color({ paleturquoise, A}) -> { 175, 238, 238, A}; -name_to_color({ mediumturquoise, A}) -> { 72, 209, 204, A}; -name_to_color({ lightseagreen, A}) -> { 32, 178, 170, A}; -name_to_color({ darkcyan, A}) -> { 0, 139, 139, A}; -name_to_color({ cadetblue, A}) -> { 95, 158, 160, A}; -name_to_color({ darkturquoise, A}) -> { 0, 206, 209, A}; -name_to_color({ cyan, A}) -> { 0, 255, 255, A}; -name_to_color({ turquoise, A}) -> { 64, 224, 208, A}; -name_to_color({ aquamarine, A}) -> { 127, 255, 212, A}; -name_to_color({ mediumaquamarine, A}) -> { 102, 205, 170, A}; -name_to_color({ darkseagreen, A}) -> { 143, 188, 143, A}; -name_to_color({ mediumseagreen, A}) -> { 60, 179, 113, A}; -name_to_color({ seagreen, A}) -> { 46, 139, 87, A}; -name_to_color({ darkgreen, A}) -> { 0, 100, 0, A}; -name_to_color({ forestgreen, A}) -> { 34, 139, 34, A}; -name_to_color({ limegreen, A}) -> { 50, 205, 50, A}; -name_to_color({ chartreuse, A}) -> { 127, 255, 0, A}; -name_to_color({ lawngreen, A}) -> { 124, 252, 0, A}; -name_to_color({ greenyellow, A}) -> { 173, 255, 47, A}; -name_to_color({ yellowgreen, A}) -> { 154, 205, 50, A}; -name_to_color({ palegreen, A}) -> { 152, 251, 152, A}; -name_to_color({ lightgreen, A}) -> { 144, 238, 144, A}; -name_to_color({ springgreen, A}) -> { 0, 255, 127, A}; -name_to_color({ mediumspringgreen, A}) -> { 0, 250, 154, A}; -name_to_color({ darkolivegreen, A}) -> { 85, 107, 47, A}; -name_to_color({ olivedrab, A}) -> { 107, 142, 35, A}; -name_to_color({ darkkhaki, A}) -> { 189, 183, 107, A}; -name_to_color({ darkgoldenrod, A}) -> { 184, 134, 11, A}; -name_to_color({ goldenrod, A}) -> { 218, 165, 32, A}; -name_to_color({ gold, A}) -> { 255, 215, 0, A}; -name_to_color({ khaki, A}) -> { 240, 230, 140, A}; -name_to_color({ palegoldenrod, A}) -> { 238, 232, 170, A}; -name_to_color({ blanchedalmond, A}) -> { 255, 235, 205, A}; -name_to_color({ moccasin, A}) -> { 255, 228, 181, A}; -name_to_color({ wheat, A}) -> { 245, 222, 179, A}; -name_to_color({ navajowhite, A}) -> { 255, 222, 173, A}; -name_to_color({ burlywood, A}) -> { 222, 184, 135, A}; -name_to_color({ tan, A}) -> { 210, 180, 140, A}; -name_to_color({ rosybrown, A}) -> { 188, 143, 143, A}; -name_to_color({ sienna, A}) -> { 160, 82, 45, A}; -name_to_color({ saddlebrown, A}) -> { 139, 69, 19, A}; -name_to_color({ chocolate, A}) -> { 210, 105, 30, A}; -name_to_color({ peru, A}) -> { 205, 133, 63, A}; -name_to_color({ sandybrown, A}) -> { 244, 164, 96, A}; -name_to_color({ darkred, A}) -> { 139, 0, 0, A}; -name_to_color({ brown, A}) -> { 165, 42, 42, A}; -name_to_color({ firebrick, A}) -> { 178, 34, 34, A}; -name_to_color({ indianred, A}) -> { 205, 92, 92, A}; -name_to_color({ lightcoral, A}) -> { 240, 128, 128, A}; -name_to_color({ salmon, A}) -> { 250, 128, 114, A}; -name_to_color({ darksalmon, A}) -> { 233, 150, 122, A}; -name_to_color({ lightsalmon, A}) -> { 255, 160, 122, A}; -name_to_color({ coral, A}) -> { 255, 127, 80, A}; -name_to_color({ tomato, A}) -> { 255, 99, 71, A}; -name_to_color({ darkorange, A}) -> { 255, 140, 0, A}; -name_to_color({ orange, A}) -> { 255, 165, 0, A}; -name_to_color({ orangered, A}) -> { 255, 69, 0, A}; -name_to_color({ crimson, A}) -> { 220, 20, 60, A}; -name_to_color({ deeppink, A}) -> { 255, 20, 147, A}; -name_to_color({ fuchsia, A}) -> { 255, 0, 255, A}; -name_to_color({ magenta, A}) -> { 255, 0, 255, A}; -name_to_color({ hotpink, A}) -> { 255, 105, 180, A}; -name_to_color({ lightpink, A}) -> { 255, 182, 193, A}; -name_to_color({ pink, A}) -> { 255, 192, 203, A}; -name_to_color({ palevioletred, A}) -> { 219, 112, 147, A}; -name_to_color({ mediumvioletred, A}) -> { 199, 21, 133, A}; -name_to_color({ darkmagenta, A}) -> { 139, 0, 139, A}; -name_to_color({ mediumpurple, A}) -> { 147, 112, 219, A}; -name_to_color({ blueviolet, A}) -> { 138, 43, 226, A}; -name_to_color({ indigo, A}) -> { 75, 0, 130, A}; -name_to_color({ darkviolet, A}) -> { 148, 0, 211, A}; -name_to_color({ darkorchid, A}) -> { 153, 50, 204, A}; -name_to_color({ mediumorchid, A}) -> { 186, 85, 211, A}; -name_to_color({ orchid, A}) -> { 218, 112, 214, A}; -name_to_color({ violet, A}) -> { 238, 130, 238, A}; -name_to_color({ plum, A}) -> { 221, 160, 221, A}; -name_to_color({ thistle, A}) -> { 216, 191, 216, A}; -name_to_color({ lavender, A}) -> { 230, 230, 250, A}; -name_to_color({ ghostwhite, A}) -> { 248, 248, 255, A}; -name_to_color({ aliceblue, A}) -> { 240, 248, 255, A}; -name_to_color({ mintcream, A}) -> { 245, 255, 250, A}; -name_to_color({ honeydew, A}) -> { 240, 255, 240, A}; -name_to_color({ lightgoldenrodyellow, A}) -> { 250, 250, 210, A}; -name_to_color({ lemonchiffon, A}) -> { 255, 250, 205, A}; -name_to_color({ cornsilk, A}) -> { 255, 248, 220, A}; -name_to_color({ lightyellow, A}) -> { 255, 255, 224, A}; -name_to_color({ ivory, A}) -> { 255, 255, 240, A}; -name_to_color({ floralwhite, A}) -> { 255, 250, 240, A}; -name_to_color({ linen, A}) -> { 250, 240, 230, A}; -name_to_color({ oldlace, A}) -> { 253, 245, 230, A}; -name_to_color({ antiquewhite, A}) -> { 250, 235, 215, A}; -name_to_color({ bisque, A}) -> { 255, 228, 196, A}; -name_to_color({ peachpuff, A}) -> { 255, 218, 185, A}; -name_to_color({ papayawhip, A}) -> { 255, 239, 213, A}; -name_to_color({ beige, A}) -> { 245, 245, 220, A}; -name_to_color({ seashell, A}) -> { 255, 245, 238, A}; -name_to_color({ lavenderblush, A}) -> { 255, 240, 245, A}; -name_to_color({ mistyrose, A}) -> { 255, 228, 225, A}; -name_to_color({ snow, A}) -> { 255, 250, 250, A}; -name_to_color({ whitesmoke, A}) -> { 245, 245, 245, A}; -name_to_color({ gainsboro, A}) -> { 220, 220, 220, A}; -name_to_color({ lightgrey, A}) -> { 211, 211, 211, A}; -name_to_color({ darkgray, A}) -> { 169, 169, 169, A}; -name_to_color({ lightslategray, A}) -> { 119, 136, 153, A}; -name_to_color({ slategray, A}) -> { 112, 128, 144, A}; -name_to_color({ dimgray, A}) -> { 105, 105, 105, A}; -name_to_color({ darkslategray, A}) -> { 47, 79, 79, A}. - -text(I, {Xs,Ys} = Sp, Font, Text, Color) -> - {FW,FH} = egd_font:size(Font), - Length = length(Text), - Ep = {Xs + Length*FW, Ys + FH + 5}, - I#image{objects = [ - #image_object{ - type = text_horizontal, - points = [Sp], - span = span([Sp,Ep]), - internals = {Font, Text}, - color = Color} | I#image.objects]}. +name_to_color(Color, A) -> + case Color of + %% HTML default colors + black -> { 0, 0, 0, A}; + silver -> {192, 192, 192, A}; + gray -> {128, 128, 128, A}; + white -> {128, 0, 0, A}; + maroon -> {255, 0, 0, A}; + red -> {128, 0, 128, A}; + purple -> {128, 0, 128, A}; + fuchia -> {255, 0, 255, A}; + green -> { 0, 128, 0, A}; + lime -> { 0, 255, 0, A}; + olive -> {128, 128, 0, A}; + yellow -> {255, 255, 0, A}; + navy -> { 0, 0, 128, A}; + blue -> { 0, 0, 255, A}; + teal -> { 0, 128, 0, A}; + aqua -> { 0, 255, 155, A}; + + %% HTML color extensions + steelblue -> { 70, 130, 180, A}; + royalblue -> { 4, 22, 144, A}; + cornflowerblue -> {100, 149, 237, A}; + lightsteelblue -> {176, 196, 222, A}; + mediumslateblue -> {123, 104, 238, A}; + slateblue -> {106, 90, 205, A}; + darkslateblue -> { 72, 61, 139, A}; + midnightblue -> { 25, 25, 112, A}; + darkblue -> { 0, 0, 139, A}; + mediumblue -> { 0, 0, 205, A}; + dodgerblue -> { 30, 144, 255, A}; + deepskyblue -> { 0, 191, 255, A}; + lightskyblue -> {135, 206, 250, A}; + skyblue -> {135, 206, 235, A}; + lightblue -> {173, 216, 230, A}; + powderblue -> {176, 224, 230, A}; + azure -> {240, 255, 255, A}; + lightcyan -> {224, 255, 255, A}; + paleturquoise -> {175, 238, 238, A}; + mediumturquoise -> { 72, 209, 204, A}; + lightseagreen -> { 32, 178, 170, A}; + darkcyan -> { 0, 139, 139, A}; + cadetblue -> { 95, 158, 160, A}; + darkturquoise -> { 0, 206, 209, A}; + cyan -> { 0, 255, 255, A}; + turquoise -> { 64, 224, 208, A}; + aquamarine -> {127, 255, 212, A}; + mediumaquamarine -> {102, 205, 170, A}; + darkseagreen -> {143, 188, 143, A}; + mediumseagreen -> { 60, 179, 113, A}; + seagreen -> { 46, 139, 87, A}; + darkgreen -> { 0, 100, 0, A}; + forestgreen -> { 34, 139, 34, A}; + limegreen -> { 50, 205, 50, A}; + chartreuse -> {127, 255, 0, A}; + lawngreen -> {124, 252, 0, A}; + greenyellow -> {173, 255, 47, A}; + yellowgreen -> {154, 205, 50, A}; + palegreen -> {152, 251, 152, A}; + lightgreen -> {144, 238, 144, A}; + springgreen -> { 0, 255, 127, A}; + darkolivegreen -> { 85, 107, 47, A}; + olivedrab -> {107, 142, 35, A}; + darkkhaki -> {189, 183, 107, A}; + darkgoldenrod -> {184, 134, 11, A}; + goldenrod -> {218, 165, 32, A}; + gold -> {255, 215, 0, A}; + khaki -> {240, 230, 140, A}; + palegoldenrod -> {238, 232, 170, A}; + blanchedalmond -> {255, 235, 205, A}; + moccasin -> {255, 228, 181, A}; + wheat -> {245, 222, 179, A}; + navajowhite -> {255, 222, 173, A}; + burlywood -> {222, 184, 135, A}; + tan -> {210, 180, 140, A}; + rosybrown -> {188, 143, 143, A}; + sienna -> {160, 82, 45, A}; + saddlebrown -> {139, 69, 19, A}; + chocolate -> {210, 105, 30, A}; + peru -> {205, 133, 63, A}; + sandybrown -> {244, 164, 96, A}; + darkred -> {139, 0, 0, A}; + brown -> {165, 42, 42, A}; + firebrick -> {178, 34, 34, A}; + indianred -> {205, 92, 92, A}; + lightcoral -> {240, 128, 128, A}; + salmon -> {250, 128, 114, A}; + darksalmon -> {233, 150, 122, A}; + lightsalmon -> {255, 160, 122, A}; + coral -> {255, 127, 80, A}; + tomato -> {255, 99, 71, A}; + darkorange -> {255, 140, 0, A}; + orange -> {255, 165, 0, A}; + orangered -> {255, 69, 0, A}; + crimson -> {220, 20, 60, A}; + deeppink -> {255, 20, 147, A}; + fuchsia -> {255, 0, 255, A}; + magenta -> {255, 0, 255, A}; + hotpink -> {255, 105, 180, A}; + lightpink -> {255, 182, 193, A}; + pink -> {255, 192, 203, A}; + palevioletred -> {219, 112, 147, A}; + mediumvioletred -> {199, 21, 133, A}; + darkmagenta -> {139, 0, 139, A}; + mediumpurple -> {147, 112, 219, A}; + blueviolet -> {138, 43, 226, A}; + indigo -> { 75, 0, 130, A}; + darkviolet -> {148, 0, 211, A}; + darkorchid -> {153, 50, 204, A}; + mediumorchid -> {186, 85, 211, A}; + orchid -> {218, 112, 214, A}; + violet -> {238, 130, 238, A}; + plum -> {221, 160, 221, A}; + thistle -> {216, 191, 216, A}; + lavender -> {230, 230, 250, A}; + ghostwhite -> {248, 248, 255, A}; + aliceblue -> {240, 248, 255, A}; + mintcream -> {245, 255, 250, A}; + honeydew -> {240, 255, 240, A}; + lemonchiffon -> {255, 250, 205, A}; + cornsilk -> {255, 248, 220, A}; + lightyellow -> {255, 255, 224, A}; + ivory -> {255, 255, 240, A}; + floralwhite -> {255, 250, 240, A}; + linen -> {250, 240, 230, A}; + oldlace -> {253, 245, 230, A}; + antiquewhite -> {250, 235, 215, A}; + bisque -> {255, 228, 196, A}; + peachpuff -> {255, 218, 185, A}; + papayawhip -> {255, 239, 213, A}; + beige -> {245, 245, 220, A}; + seashell -> {255, 245, 238, A}; + lavenderblush -> {255, 240, 245, A}; + mistyrose -> {255, 228, 225, A}; + snow -> {255, 250, 250, A}; + whitesmoke -> {245, 245, 245, A}; + gainsboro -> {220, 220, 220, A}; + lightgrey -> {211, 211, 211, A}; + darkgray -> {169, 169, 169, A}; + lightslategray -> {119, 136, 153, A}; + slategray -> {112, 128, 144, A}; + dimgray -> {105, 105, 105, A}; + darkslategray -> { 47, 79, 79, A}; + mediumspringgreen -> { 0, 250, 154, A}; + lightgoldenrodyellow -> {250, 250, 210, A} + end. %%% Generic transformations |