/* * Copyright (C) 2010-2016 JPEXS, All rights reserved. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 3.0 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library. */ package com.jpexs.decompiler.flash.importers.svg; import java.awt.Color; /** * * @author JPEXS */ class SvgColor extends SvgFill { public Color color; public SvgColor(int r, int g, int b, int opacity) { this(new Color(r, g, b, opacity)); } public SvgColor(int r, int g, int b) { this(new Color(r, g, b)); } public SvgColor(Color color) { this.color = color; } @Override public Color toColor() { return this.color; } public static SvgColor parse(String colorString) { if (colorString == null) { return null; } // named colors from: http://www.w3.org/TR/SVG/types.html#ColorKeywords switch (colorString) { case "aliceblue": return new SvgColor(240, 248, 255); case "antiquewhite": return new SvgColor(250, 235, 215); case "aqua": return new SvgColor(0, 255, 255); case "aquamarine": return new SvgColor(127, 255, 212); case "azure": return new SvgColor(240, 255, 255); case "beige": return new SvgColor(245, 245, 220); case "bisque": return new SvgColor(255, 228, 196); case "black": return new SvgColor(0, 0, 0); case "blanchedalmond": return new SvgColor(255, 235, 205); case "blue": return new SvgColor(0, 0, 255); case "blueviolet": return new SvgColor(138, 43, 226); case "brown": return new SvgColor(165, 42, 42); case "burlywood": return new SvgColor(222, 184, 135); case "cadetblue": return new SvgColor(95, 158, 160); case "chartreuse": return new SvgColor(127, 255, 0); case "chocolate": return new SvgColor(210, 105, 30); case "coral": return new SvgColor(255, 127, 80); case "cornflowerblue": return new SvgColor(100, 149, 237); case "cornsilk": return new SvgColor(255, 248, 220); case "crimson": return new SvgColor(220, 20, 60); case "cyan": return new SvgColor(0, 255, 255); case "darkblue": return new SvgColor(0, 0, 139); case "darkcyan": return new SvgColor(0, 139, 139); case "darkgoldenrod": return new SvgColor(184, 134, 11); case "darkgray": return new SvgColor(169, 169, 169); case "darkgreen": return new SvgColor(0, 100, 0); case "darkgrey": return new SvgColor(169, 169, 169); case "darkkhaki": return new SvgColor(189, 183, 107); case "darkmagenta": return new SvgColor(139, 0, 139); case "darkolivegreen": return new SvgColor(85, 107, 47); case "darkorange": return new SvgColor(255, 140, 0); case "darkorchid": return new SvgColor(153, 50, 204); case "darkred": return new SvgColor(139, 0, 0); case "darksalmon": return new SvgColor(233, 150, 122); case "darkseagreen": return new SvgColor(143, 188, 143); case "darkslateblue": return new SvgColor(72, 61, 139); case "darkslategray": return new SvgColor(47, 79, 79); case "darkslategrey": return new SvgColor(47, 79, 79); case "darkturquoise": return new SvgColor(0, 206, 209); case "darkviolet": return new SvgColor(148, 0, 211); case "deeppink": return new SvgColor(255, 20, 147); case "deepskyblue": return new SvgColor(0, 191, 255); case "dimgray": return new SvgColor(105, 105, 105); case "dimgrey": return new SvgColor(105, 105, 105); case "dodgerblue": return new SvgColor(30, 144, 255); case "firebrick": return new SvgColor(178, 34, 34); case "floralwhite": return new SvgColor(255, 250, 240); case "forestgreen": return new SvgColor(34, 139, 34); case "fuchsia": return new SvgColor(255, 0, 255); case "gainsboro": return new SvgColor(220, 220, 220); case "ghostwhite": return new SvgColor(248, 248, 255); case "gold": return new SvgColor(255, 215, 0); case "goldenrod": return new SvgColor(218, 165, 32); case "gray": return new SvgColor(128, 128, 128); case "grey": return new SvgColor(128, 128, 128); case "green": return new SvgColor(0, 128, 0); case "greenyellow": return new SvgColor(173, 255, 47); case "honeydew": return new SvgColor(240, 255, 240); case "hotpink": return new SvgColor(255, 105, 180); case "indianred": return new SvgColor(205, 92, 92); case "indigo": return new SvgColor(75, 0, 130); case "ivory": return new SvgColor(255, 255, 240); case "khaki": return new SvgColor(240, 230, 140); case "lavender": return new SvgColor(230, 230, 250); case "lavenderblush": return new SvgColor(255, 240, 245); case "lawngreen": return new SvgColor(124, 252, 0); case "lemonchiffon": return new SvgColor(255, 250, 205); case "lightblue": return new SvgColor(173, 216, 230); case "lightcoral": return new SvgColor(240, 128, 128); case "lightcyan": return new SvgColor(224, 255, 255); case "lightgoldenrodyellow": return new SvgColor(250, 250, 210); case "lightgray": return new SvgColor(211, 211, 211); case "lightgreen": return new SvgColor(144, 238, 144); case "lightgrey": return new SvgColor(211, 211, 211); case "lightpink": return new SvgColor(255, 182, 193); case "lightsalmon": return new SvgColor(255, 160, 122); case "lightseagreen": return new SvgColor(32, 178, 170); case "lightskyblue": return new SvgColor(135, 206, 250); case "lightslategray": return new SvgColor(119, 136, 153); case "lightslategrey": return new SvgColor(119, 136, 153); case "lightsteelblue": return new SvgColor(176, 196, 222); case "lightyellow": return new SvgColor(255, 255, 224); case "lime": return new SvgColor(0, 255, 0); case "limegreen": return new SvgColor(50, 205, 50); case "linen": return new SvgColor(250, 240, 230); case "magenta": return new SvgColor(255, 0, 255); case "maroon": return new SvgColor(128, 0, 0); case "mediumaquamarine": return new SvgColor(102, 205, 170); case "mediumblue": return new SvgColor(0, 0, 205); case "mediumorchid": return new SvgColor(186, 85, 211); case "mediumpurple": return new SvgColor(147, 112, 219); case "mediumseagreen": return new SvgColor(60, 179, 113); case "mediumslateblue": return new SvgColor(123, 104, 238); case "mediumspringgreen": return new SvgColor(0, 250, 154); case "mediumturquoise": return new SvgColor(72, 209, 204); case "mediumvioletred": return new SvgColor(199, 21, 133); case "midnightblue": return new SvgColor(25, 25, 112); case "mintcream": return new SvgColor(245, 255, 250); case "mistyrose": return new SvgColor(255, 228, 225); case "moccasin": return new SvgColor(255, 228, 181); case "navajowhite": return new SvgColor(255, 222, 173); case "navy": return new SvgColor(0, 0, 128); case "oldlace": return new SvgColor(253, 245, 230); case "olive": return new SvgColor(128, 128, 0); case "olivedrab": return new SvgColor(107, 142, 35); case "orange": return new SvgColor(255, 165, 0); case "orangered": return new SvgColor(255, 69, 0); case "orchid": return new SvgColor(218, 112, 214); case "palegoldenrod": return new SvgColor(238, 232, 170); case "palegreen": return new SvgColor(152, 251, 152); case "paleturquoise": return new SvgColor(175, 238, 238); case "palevioletred": return new SvgColor(219, 112, 147); case "papayawhip": return new SvgColor(255, 239, 213); case "peachpuff": return new SvgColor(255, 218, 185); case "peru": return new SvgColor(205, 133, 63); case "pink": return new SvgColor(255, 192, 203); case "plum": return new SvgColor(221, 160, 221); case "powderblue": return new SvgColor(176, 224, 230); case "purple": return new SvgColor(128, 0, 128); case "red": return new SvgColor(255, 0, 0); case "rosybrown": return new SvgColor(188, 143, 143); case "royalblue": return new SvgColor(65, 105, 225); case "saddlebrown": return new SvgColor(139, 69, 19); case "salmon": return new SvgColor(250, 128, 114); case "sandybrown": return new SvgColor(244, 164, 96); case "seagreen": return new SvgColor(46, 139, 87); case "seashell": return new SvgColor(255, 245, 238); case "sienna": return new SvgColor(160, 82, 45); case "silver": return new SvgColor(192, 192, 192); case "skyblue": return new SvgColor(135, 206, 235); case "slateblue": return new SvgColor(106, 90, 205); case "slategray": return new SvgColor(112, 128, 144); case "slategrey": return new SvgColor(112, 128, 144); case "snow": return new SvgColor(255, 250, 250); case "springgreen": return new SvgColor(0, 255, 127); case "steelblue": return new SvgColor(70, 130, 180); case "tan": return new SvgColor(210, 180, 140); case "teal": return new SvgColor(0, 128, 128); case "thistle": return new SvgColor(216, 191, 216); case "tomato": return new SvgColor(255, 99, 71); case "turquoise": return new SvgColor(64, 224, 208); case "violet": return new SvgColor(238, 130, 238); case "wheat": return new SvgColor(245, 222, 179); case "white": return new SvgColor(255, 255, 255); case "whitesmoke": return new SvgColor(245, 245, 245); case "yellow": return new SvgColor(255, 255, 0); case "yellowgreen": return new SvgColor(154, 205, 50); } if (colorString.startsWith("#")) { String s = colorString.substring(1); if (s.length() == 3) { s = "" + s.charAt(0) + s.charAt(0) + s.charAt(1) + s.charAt(1) + s.charAt(2) + s.charAt(2); } int i = Integer.parseInt(s, 16); return new SvgColor(new Color(i, false)); } else if (colorString.startsWith("rgb")) { colorString = colorString.substring(3).trim(); if (colorString.startsWith("(") && colorString.endsWith(")")) { colorString = colorString.substring(1, colorString.length() - 1); String[] args = colorString.split(","); if (args.length == 3) { String a0 = args[0].trim(); String a1 = args[1].trim(); String a2 = args[2].trim(); if (a0.endsWith("%") && a1.endsWith("%") && a2.endsWith("%")) { int r = (int) Math.round(Double.parseDouble(a0.substring(0, a0.length() - 1)) * 255.0 / 100); int g = (int) Math.round(Double.parseDouble(a1.substring(0, a1.length() - 1)) * 255.0 / 100); int b = (int) Math.round(Double.parseDouble(a2.substring(0, a2.length() - 1)) * 255.0 / 100); return new SvgColor(r, g, b); } else { int r = Integer.parseInt(a0); int g = Integer.parseInt(a1); int b = Integer.parseInt(a2); return new SvgColor(r, g, b); } } } } return null; } }