public static ColorRemap CreateFromSkin(SvgSkin skin) { var ret = new ColorRemap(true); ret.InitGroups(skin); ret.Name = "Default theme"; // extract fills and strokes from skin foreach (var group in ret._groups) { foreach (var elem in group) { // ensure element has an internal id which we can use to refer to it from our dict if (string.IsNullOrEmpty(elem.ID)) { elem.SetAndForceUniqueID(elem.ElementName, true, null); } Color fill = Color.Empty; Color stroke = Color.Empty; if (elem.Fill is SvgColourServer cf) { fill = cf.Colour; } if (elem.Stroke is SvgColourServer cs) { stroke = cs.Colour; } ret.Elements[elem.ID] = Tuple.Create(fill, stroke); } } return(ret); }
public void ApplyToSkin(SvgSkin skin) { InitGroups(skin); foreach (var group in _groups) { foreach (var elem in group) { if (string.IsNullOrEmpty(elem.ID)) { elem.SetAndForceUniqueID("elem", true, null); } if (Elements.ContainsKey(elem.ID)) { var tup = Elements[elem.ID]; if (elem.Fill is SvgColourServer cf) { cf.Colour = tup.Item1; } if (elem.Stroke is SvgColourServer cs) { cs.Colour = tup.Item2; } } } } }
private void InitGroups(SvgSkin skin) { // groups svg elements by fill and stroke var all = skin.SvgDocument.Children.FindSvgElementsOf <SvgVisualElement>() .Where(e => e.ContainsAttribute("fill") || e.ContainsAttribute("stroke")); _groups.Clear(); var grouped = all.GroupBy(e => new { e.Fill, e.Stroke }).ToList(); foreach (var group in grouped) { var g = new GroupedSvgElems(group.Key.Fill, group.Key.Stroke); g.AddRange(group.AsEnumerable()); _groups.Add(g); } }
public static Skin Clone(Skin skin) { if (skin is SvgSkin svg) { var clone = new SvgSkin(); clone.Load(svg.Path); return(clone); } else if (skin is NintendoSpySkin nspy) { var clone = new NintendoSpySkin(); clone.Load(nspy.Path); return(clone); } else if (skin is PadpyghtSkin ppyght) { var clone = new PadpyghtSkin(); clone.Load(ppyght.Path); return(clone); } return(null); }