예제 #1
0
        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);
        }
예제 #2
0
        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;
                        }
                    }
                }
            }
        }
예제 #3
0
        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);
            }
        }
예제 #4
0
        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);
        }