Exemplo n.º 1
0
        private IEnumerable <SvgVisualElement> FindElemsAt(Point loc)
        {
            List <SvgVisualElement> candidates = new List <SvgVisualElement>();

            void containsRecurse(SvgElement elem)
            {
                if (elem is SvgVisualElement vis && vis.Visible)
                {
                    var bounds       = SvgSkin.CalcBounds(vis);
                    var l            = _skin.Unproject(bounds.Location);
                    var s            = _skin.Unproject(new PointF(bounds.Right, bounds.Bottom));
                    var boundsScaled = RectangleF.FromLTRB(l.X, l.Y, s.X, s.Y);

                    // if this contains the click point but is smaller yet
                    if (boundsScaled.Contains(loc))
                    {
                        candidates.Add(vis);
                    }
                }
                foreach (var child in elem.Children)
                {
                    containsRecurse(child);
                }
            }

            containsRecurse(_skin.SvgDocument);

            // select innermost box
            return(candidates.OrderBy(e => e.Bounds.Width * e.Bounds.Height));
        }
Exemplo n.º 2
0
        public SkinRemapManagerForm(SvgSkin skin, ColorRemap selectedRemap, BindingList <ColorRemap> remaps) : this()
        {
            _skin   = skin;
            _remaps = remaps;

            // initialize listbox
            list.DataSource   = _remaps;
            list.SelectedItem = SelectedRemap = selectedRemap;

            lblSkinType.Text = $@"Color scheme for {string.Join(" ", skin.Controllers)}";
        }
Exemplo n.º 3
0
        private void SetVisibility()
        {
            bool hl = rbHighlights.Checked;

            SvgSkin.SetVisibleRecursive(_skin.SvgDocument, ckbBase.Checked);

            foreach (var b in _skin.Buttons)
            {
                if (b.Pressed != null)
                {
                    SvgSkin.SetVisibleRecursive(b.Pressed, hl);
                    if (hl)
                    {
                        SvgSkin.SetVisibleToRoot(b.Pressed, true);
                    }
                }
                if (b.Element != null)
                {
                    SvgSkin.SetVisibleRecursive(b.Element, !hl);
                    if (!hl)
                    {
                        SvgSkin.SetVisibleToRoot(b.Element, true);
                    }
                }
            }

            foreach (var s in _skin.Sticks)
            {
                if (s.Pressed != null)
                {
                    SvgSkin.SetVisibleRecursive(s.Pressed, hl);
                    if (hl)
                    {
                        SvgSkin.SetVisibleToRoot(s.Pressed, true);
                    }
                }
                if (s.Element != null)
                {
                    SvgSkin.SetVisibleRecursive(s.Element, !hl);
                    if (!hl)
                    {
                        SvgSkin.SetVisibleToRoot(s.Element, true);
                    }
                }
            }

            foreach (var t in _skin.Triggers)
            {
                SvgSkin.SetVisibleRecursive(t.Element, !hl);
                SvgSkin.SetVisibleToRoot(t.Element, !hl);
            }
        }
Exemplo n.º 4
0
        private void btnExport_Click(object sender, EventArgs e)
        {
            if (SelectedRemap == null)
            {
                return;
            }

            var newSkin = new SvgSkin();

            newSkin.Load(_skin.Path);
            newSkin.ApplyRemap(SelectedRemap);

            sfd.FileName = $@"{Path.GetFileNameWithoutExtension(_skin.Path)}_{SelectedRemap.Name}.svg";
            if (sfd.ShowDialog() == DialogResult.OK)
            {
                newSkin.SvgDocument.Write(sfd.FileName);
            }
        }
Exemplo n.º 5
0
        public RemapManagerForm(SvgSkin skin, ColorRemap selectedRemap, BindingList <ColorRemap> remaps) : this()
        {
            _skin   = skin;
            _remaps = remaps;
            if (_remaps.Count(r => r.IsSkinDefault) == 0)
            {
                _defaultRemap = ColorRemap.CreateFromSkin(skin);
                _remaps.Add(_defaultRemap);
            }
            else
            {
                _defaultRemap = _remaps.First(r => r.IsSkinDefault);
            }

            // initialize listbox
            list.DataSource   = _remaps;
            list.SelectedItem = SelectedRemap = selectedRemap;

            lblSkinType.Text = $@"Color scheme for {string.Join(" ", skin.Controllers)}";
        }
Exemplo n.º 6
0
 public static void LoadSkins()
 {
     foreach (string svgPath in Directory.GetFiles("./skins", "*.svg"))
     {
         var svg = new SvgSkin();
         svg.Load(svgPath);
         Skins.Add(svg);
     }
     foreach (string padpyghtDir in Directory.GetDirectories("./skins"))
     {
         foreach (string iniPath in Directory.GetFiles(padpyghtDir, "*.ini"))
         {
             var pp = new PadpyghtSkin();
             pp.Load(iniPath);
             if (pp.LoadResult == SkinLoadResult.Ok)
             {
                 Skins.Add(pp);
             }
         }
     }
 }
Exemplo n.º 7
0
        public static void LoadSkins()
        {
            foreach (var dir in SkinFolders)
            {
                if (!Directory.Exists(dir.Path))
                {
                    continue;
                }

                if ((dir.Types & SkinType.Svg) != 0)
                {
                    foreach (string svgPath in Directory.GetFiles(dir.Path, "*.svg"))
                    {
                        var svg = new SvgSkin();
                        svg.Load(svgPath);
                        if (svg.LoadResult == SkinLoadResult.Ok)
                        {
                            Skins.Add(svg);
                            var b = new BindingList <ColorRemap>();
                            foreach (var map in svg.EmbeddedRemaps)
                            {
                                b.Add(map);
                            }
                            AvailableRemaps[svg.Path] = b;
                            SelectedRemaps[svg]       = null;
                        }
                    }
                }

                if ((dir.Types & SkinType.PadPyght) != 0)
                {
                    foreach (string padpyghtDir in Directory.GetDirectories(dir.Path))
                    {
                        foreach (string iniPath in Directory.GetFiles(padpyghtDir, "*.ini"))
                        {
                            var pp = new PadpyghtSkin();
                            pp.Load(iniPath);
                            if (pp.LoadResult == SkinLoadResult.Ok)
                            {
                                Skins.Add(pp);
                            }
                        }
                    }
                }

                if ((dir.Types & SkinType.NintendoSpy) != 0)
                {
                    foreach (string nspyDir in Directory.GetDirectories(dir.Path))
                    {
                        foreach (string xmlPath in Directory.GetFiles(nspyDir, "skin.xml"))
                        {
                            var pp = new NintendoSpySkin();
                            pp.Load(xmlPath);
                            if (pp.LoadResult == SkinLoadResult.Ok)
                            {
                                Skins.Add(pp);
                            }
                        }
                    }
                }
            }
        }
Exemplo n.º 8
0
        public SkinRemapperForm(string path, ColorRemap remap) : this()
        {
            _skin = new SvgSkin();
            _skin.Load(path);
            Remap = remap;
            remap.ApplyToSkin(this._skin);

            var highlightElems = _skin.Buttons.Where(b => b.Pressed != null).Select(b => b.Pressed)
                                 .Union(_skin.Sticks.Where(s => s.Pressed != null).Select(s => s.Pressed));

            var nonHighlightElems = _skin.Buttons.Where(b => b.Element != null).Select(b => b.Element)
                                    .Union(_skin.Sticks.Where(s => s.Element != null).Select(s => s.Element))
                                    .Union(_skin.Triggers.Where(t => t.Element != null).Select(t => t.Element));

            // split remap groups into highlight/non-highlight/base categories
            foreach (var group in remap.Groups)
            {
                var grpHl    = new GroupedSvgElems(group.Fill, group.Stroke);
                var grpNonHl = new GroupedSvgElems(group.Fill, group.Stroke);
                var grpBase  = new GroupedSvgElems(group.Fill, group.Stroke);

                foreach (var elem in group)
                {
                    bool hl    = GroupContains(elem, highlightElems);
                    bool nonHl = GroupContains(elem, nonHighlightElems);
                    if (hl)
                    {
                        grpHl.Add(elem);
                    }
                    if (nonHl)
                    {
                        grpNonHl.Add(elem);
                    }
                    if (!hl && !nonHl)
                    {
                        grpBase.Add(elem);
                    }
                }

                if (grpNonHl.Count == 0 && grpBase.Count == 0)
                {
                    // this is entirely a HL group
                    _highlights.Add(group);
                }
                else if (grpHl.Count == 0 && grpBase.Count == 0)
                {
                    // this is entirely a non-HL group
                    _nonHighlights.Add(group);
                }
                else if (grpHl.Count == 0 && grpNonHl.Count == 0)
                {
                    _base.Add(group);
                }
                else
                {
                    // split up
                    if (grpHl.Any())
                    {
                        _highlights.Add(grpHl);
                    }
                    if (grpNonHl.Any())
                    {
                        _nonHighlights.Add(grpNonHl);
                    }
                    if (grpBase.Any())
                    {
                        _base.Add(grpBase);
                    }
                }
            }

            tbSkinName.DataBindings.Add("Text", Remap, "Name");
            lbGroups.DisplayMember = nameof(GroupedSvgElems.Name);
            PopulateListbox();
        }