Пример #1
0
 private void EndSkinPreview()
 {
     if (_previewDelayTimer != null)
     {
         _previewDelayTimer.Change(Timeout.Infinite, Timeout.Infinite);                 // disable
     }
     if (_activeSkinPreview != null)
     {
         _activeSkinPreview?.Hide();
         _activeSkinPreview.Dispose();
         _activeSkinPreview = null;
     }
 }
Пример #2
0
        private void HoverSkinPreview(object sender, Skin skin)
        {
            if (skin == null || skin.Path == _activeSkinPreview?.Skin?.Path || _busyRendering)
            {
                return;
            }

            try {
                // create a clone of requested skin
                var clonedSkin = Skin.Clone(skin);
                if (clonedSkin.LoadResult != SkinLoadResult.Ok)
                {
                    return;
                }

                _activeSkinPreview?.Skin?.Deactivate();
                _activeSkinPreview?.Hide();

                Point loc = this.PointToClient(Cursor.Position);
                if (sender is ToolStripMenuItem tsmi)
                {
                    // make sure preview is at least to the right of the toolstrip item
                    int           r    = menu.Left;
                    int           t    = menu.Bottom;
                    ToolStripItem item = tsmi;
                    while (item != null)
                    {
                        if (item.Owner != menu)
                        {
                            r += item.Bounds.Width;
                        }

                        // add vertical offset
                        var parent = item.OwnerItem as ToolStripMenuItem;
                        int i      = 0;
                        while (parent != null && i < parent.DropDownItems.Count)
                        {
                            if (parent.DropDownItems[i] == item)
                            {
                                break;
                            }
                            t += parent.DropDownItems[i].Height;
                            i++;
                        }
                        item = parent;
                    }
                    loc = new Point(r, t);
                    loc.Offset(5, 5);                     // small margin
                }

                if (_activeSkinPreview == null)
                {
                    _activeSkinPreview          = new SkinPreviewWindow(clonedSkin);
                    _activeSkinPreview.Location = loc;
                    Controls.Add(_activeSkinPreview);
                    _activeSkinPreview.BringToFront();
                }
                else
                {
                    _activeSkinPreview.Location = loc;
                    _activeSkinPreview.ChangeSkin(clonedSkin);
                }

                ControllerState state = new ControllerState();
                skin.GetNumberOfElements(out int numButtons, out int numAxes);
                state.Buttons.EnsureSize(numButtons);
                state.Axes.EnsureSize(numAxes);
                _activeSkinPreview.RenderSkin(state);

                _activeSkinPreview.Show();
            }
            finally {
                _busyRendering = false;
            }
        }