コード例 #1
0
        private void SetupEvents()
        {
            _pencilbtn.Clicked += (o, e) => CurrentTools.SetTool(CurrentTools.PencilTool);
            _linebtn.Clicked   += (o, e) => CurrentTools.SetTool(CurrentTools.LineTool);
            _eraserbtn.Clicked += (o, e) => CurrentTools.SetTool(CurrentTools.EraserTool);
            _selectbtn.Clicked += (o, e) => CurrentTools.SetTool(CurrentTools.MoveTool);
            _handbtn.Clicked   += (o, e) => CurrentTools.SetTool(CurrentTools.HandTool);
            _flag.Clicked      += (o, e) =>
            {
                _editor.Flag(_editor.Offset);
            };
            // _pause.IsHidden = true;
            _start.Clicked += (o, e) =>
            {
                CurrentTools.SelectedTool.Stop();
                if (UI.InputUtils.Check(Hotkey.PlayButtonIgnoreFlag))
                {
                    _editor.StartIgnoreFlag();
                }
                else
                {
                    if (_editor.Paused)
                    {
                        _editor.TogglePause();
                    }
                    else
                    {
                        _editor.StartFromFlag();
                    }
                }
                _editor.Scheduler.DefaultSpeed();
                _pause.IsHidden = false;
                _start.IsHidden = true;;
            };
            _stop.Clicked += (o, e) =>
            {
                CurrentTools.SelectedTool.Stop();
                _editor.Stop();
            };
            _pause.Clicked += (o, e) =>
            {
                CurrentTools.SelectedTool.Stop();
                _editor.TogglePause();
                _pause.IsHidden = true;
                _start.IsHidden = false;
            };
            _menu.Clicked += (o, e) =>
            {
                Menu menu = new Menu(_canvas);
                menu.AddItem("Save").Clicked += (o2, e2) => { _canvas.ShowSaveDialog(); };
                menu.AddItem("Load").Clicked += (o2, e2) => { _canvas.ShowLoadDialog(); };
                menu.AddItem("New").Clicked  += (o2, e2) =>
                {
                    if (_editor.TrackChanges != 0)
                    {
                        var save = MessageBox.Show(
                            _canvas,
                            "You are creating a new track.\nDo you want to save your current changes?",
                            "Create New Track",
                            MessageBox.ButtonType.YesNoCancel);
                        save.RenameButtonsYN("Save", "Discard", "Cancel");
                        save.Dismissed += (o3, result) =>
                        {
                            switch (result)
                            {
                            case DialogResult.Yes:
                                _canvas.ShowSaveDialog();
                                break;

                            case DialogResult.No:
                                NewTrack();
                                break;
                            }
                        };
                    }
                    else
                    {
                        var msg = MessageBox.Show(
                            _canvas,
                            "Are you sure you want to create a new track?",
                            "Create New Track",
                            MessageBox.ButtonType.OkCancel);
                        msg.RenameButtons("Create");
                        msg.Dismissed += (o3, result) =>
                        {
                            if (result == DialogResult.OK)
                            {
                                NewTrack();
                            }
                        };
                    }
                };
                menu.AddItem("Preferences").Clicked      += (o2, e2) => _canvas.ShowPreferencesDialog();
                menu.AddItem("Track Properties").Clicked += (o2, e2) => _canvas.ShowTrackPropertiesDialog();
                menu.AddItem("Export Video").Clicked     += (o2, e2) => _canvas.ShowExportVideoWindow();
                var canvaspos = LocalPosToCanvas(new Point(_menu.X, _menu.Y));
                menu.SetPosition(canvaspos.X, canvaspos.Y + 32);
                menu.Show();
            };
        }
コード例 #2
0
ファイル: DrawPanel.xaml.cs プロジェクト: 2276225819/prpaint
        void OnMoved(object sender, PointerRoutedEventArgs e)
        {
            if (CurrentLayer == null || !CurrentLayer.IsEdit || !CurrentLayer.IsShow)
            {
                return;
            }
            var drawable = e.Pointer.IsInContact && (
                (DrawMode == PointerDeviceType.Pen && e.Pointer.PointerDeviceType == PointerDeviceType.Pen) ||
                (DrawMode == PointerDeviceType.Touch && this.CurrentTouchCount == 1)
                );
            var pos = e.GetCurrentPoint(LAYS.ItemsPanelRoot);

            Prs = pos.Properties.Pressure;
            switch (State)
            {
            case MyEnum.None:
                if (pos.Properties.IsRightButtonPressed)
                {
                    State = MyEnum.Move2;
                    OnMove();
                    break;
                }
                if (pos.Properties.IsInverted != IsEraser)
                {
                    IsEraser = pos.Properties.IsInverted;
                    OnChangeTools?.Invoke(sender, e);
                    break;
                }
                if (drawable)
                {
                    CurrentTools.OnDrawBegin(this, pos);
                    opos = pos;
                    //CurrentTools.OnDrawing(this, pos);
                    State = MyEnum.Draw;
                    OnDraw();
                    break;
                }
                // if(DrawMode == PointerDeviceType.Pen && e.Pointer.PointerDeviceType != PointerDeviceType.Pen)
                // {
                //     OnDraw();//bug
                // }
                //if(DrawMode == PointerDeviceType.Pen && e.Pointer.PointerDeviceType != PointerDeviceType.Pen)
                //{
                //    State = MyEnum.Move; ;
                //    OnDraw();
                //    OnShow();
                //}
                break;

            case MyEnum.Draw:
                if (drawable)
                {
                    //i++;//????? opos.Position!= pos.Position
                    if (opos.Position != pos.Position)
                    {
                        CurrentTools.OnDrawing(this, pos);
                        opos = pos;
                    }
                }
                else
                {
                    if (!e.Pointer.IsInContact || CurrentTouchCount == 0)
                    {
                        CurrentTools.OnDrawCommit(this, pos);
                        State = MyEnum.None;
                        OnEnd();
                    }
                    else
                    {
                        CurrentTools.OnDrawRollback(this, pos);
                        State = MyEnum.Move;
                        OnMove();
                    }
                }
                break;

            case MyEnum.Move:
                if (drawable)
                {
                    State = MyEnum.Stop;
                }
                else
                if (this.CurrentTouchCount == 0)
                {
                    State = MyEnum.None;
                    OnEnd();
                    OnChangeDraw?.Invoke(Scale);
                }
                break;

            case MyEnum.Move2:
                if (this.CurrentTouchCount == 0)
                {
                    State = MyEnum.None;
                    OnEnd();
                }
                break;

            case MyEnum.Stop:
                if (!e.Pointer.IsInContact)
                {
                    State = MyEnum.None;
                    OnEnd();
                    OnChangeDraw?.Invoke(Scale);
                }
                else
                if (e.Pointer.IsInContact && !drawable)
                {
                    State = MyEnum.Move;
                }
                break;

            default:
                break;
            }
            e.Handled = true;
        }
コード例 #3
0
        private void RegisterEditorHotkeys()
        {
            InputUtils.RegisterHotkey(Hotkey.EditorPencilTool, () => !Track.Playing, () =>
            {
                CurrentTools.SetTool(CurrentTools.PencilTool);
            });
            InputUtils.RegisterHotkey(Hotkey.EditorLineTool, () => !Track.Playing, () =>
            {
                CurrentTools.SetTool(CurrentTools.LineTool);
            });
            InputUtils.RegisterHotkey(Hotkey.EditorEraserTool, () => !Track.Playing, () =>
            {
                CurrentTools.SetTool(CurrentTools.EraserTool);
            });
            InputUtils.RegisterHotkey(Hotkey.EditorSelectTool, () => !Track.Playing, () =>
            {
                CurrentTools.SetTool(CurrentTools.MoveTool);
            });
            InputUtils.RegisterHotkey(Hotkey.EditorPanTool, () => !Track.Playing, () =>
            {
                CurrentTools.SetTool(CurrentTools.HandTool);
            });
            InputUtils.RegisterHotkey(Hotkey.EditorQuickPan, () => !Track.Playing && !Canvas.IsModalOpen, () =>
            {
                CurrentTools.QuickPan = true;
                Invalidate();
                UpdateCursor();
            },
                                      () =>
            {
                CurrentTools.QuickPan = false;
                Invalidate();
                UpdateCursor();
            });
            InputUtils.RegisterHotkey(Hotkey.EditorDragCanvas, () => !Track.Playing && !Canvas.IsModalOpen, () =>
            {
                var mouse             = InputUtils.GetMouse();
                CurrentTools.QuickPan = true;
                CurrentTools.HandTool.OnMouseDown(new Vector2d(mouse.X, mouse.Y));
            },
                                      () =>
            {
                if (CurrentTools.QuickPan)
                {
                    var mouse = InputUtils.GetMouse();
                    CurrentTools.HandTool.OnMouseUp(new Vector2d(mouse.X, mouse.Y));
                    CurrentTools.QuickPan = false;
                }
            });

            InputUtils.RegisterHotkey(Hotkey.EditorUndo, () => !Track.Playing, () =>
            {
                CurrentTools.SelectedTool.Cancel();
                var hint = Track.UndoManager.Undo();
                CurrentTools.SelectedTool.OnUndoRedo(true, hint);
                Invalidate();
            },
                                      null,
                                      repeat: true);
            InputUtils.RegisterHotkey(Hotkey.EditorRedo, () => !Track.Playing, () =>
            {
                CurrentTools.SelectedTool.Cancel();
                var hint = Track.UndoManager.Redo();
                CurrentTools.SelectedTool.OnUndoRedo(false, hint);
                Invalidate();
            },
                                      null,
                                      repeat: true);
            InputUtils.RegisterHotkey(Hotkey.EditorRemoveLatestLine, () => !Track.Playing, () =>
            {
                if (!Track.Playing)
                {
                    StopTools();
                    using (var trk = Track.CreateTrackWriter())
                    {
                        CurrentTools.SelectedTool.Stop();
                        var l = trk.GetNewestLine();
                        if (l != null)
                        {
                            Track.UndoManager.BeginAction();
                            trk.RemoveLine(l);
                            Track.UndoManager.EndAction();
                        }

                        Track.NotifyTrackChanged();
                        Invalidate();
                    }
                }
            },
                                      null,
                                      repeat: true);
            InputUtils.RegisterHotkey(Hotkey.EditorFocusStart, () => !Track.Playing, () =>
            {
                using (var trk = Track.CreateTrackReader())
                {
                    var l = trk.GetOldestLine();
                    if (l != null)
                    {
                        Track.Camera.SetFrameCenter(l.Position);
                        Invalidate();
                    }
                }
            });
            InputUtils.RegisterHotkey(Hotkey.EditorFocusLastLine, () => !Track.Playing, () =>
            {
                using (var trk = Track.CreateTrackReader())
                {
                    var l = trk.GetNewestLine();
                    if (l != null)
                    {
                        Track.Camera.SetFrameCenter(l.Position);
                        Invalidate();
                    }
                }
            });
            InputUtils.RegisterHotkey(Hotkey.EditorCycleToolSetting, () => !Track.Playing, () =>
            {
                if (CurrentTools.SelectedTool.ShowSwatch)
                {
                    CurrentTools.SelectedTool.Swatch.IncrementSelectedMultiplier();
                    Invalidate();
                }
            });
            InputUtils.RegisterHotkey(Hotkey.ToolToggleOverlay, () => !Track.Playing, () =>
            {
                Settings.Local.TrackOverlay = !Settings.Local.TrackOverlay;
            });
            InputUtils.RegisterHotkey(Hotkey.EditorToolColor1, () => !Track.Playing, () =>
            {
                var swatch = CurrentTools.SelectedTool.Swatch;
                if (swatch != null)
                {
                    swatch.Selected = LineType.Blue;
                }
                Invalidate();
            });
            InputUtils.RegisterHotkey(Hotkey.EditorToolColor2, () => !Track.Playing, () =>
            {
                var swatch = CurrentTools.SelectedTool.Swatch;
                if (swatch != null)
                {
                    swatch.Selected = LineType.Red;
                }
                Invalidate();
            });
            InputUtils.RegisterHotkey(Hotkey.EditorToolColor3, () => !Track.Playing, () =>
            {
                var swatch = CurrentTools.SelectedTool.Swatch;
                if (swatch != null)
                {
                    swatch.Selected = LineType.Scenery;
                }
                Invalidate();
            });
            InputUtils.RegisterHotkey(Hotkey.EditorFocusFlag, () => !Track.Playing, () =>
            {
                var flag = Track.GetFlag();
                if (flag != null)
                {
                    Track.Camera.SetFrameCenter(flag.State.CalculateCenter());
                    Invalidate();
                }
            });
            InputUtils.RegisterHotkey(Hotkey.EditorFocusRider, () => !Track.Playing, () =>
            {
                Track.Camera.SetFrameCenter(Track.RenderRider.CalculateCenter());
                Invalidate();
            });
            InputUtils.RegisterHotkey(Hotkey.EditorCancelTool,
                                      () => CurrentTools.SelectedTool.Active,
                                      () =>
            {
                var tool       = CurrentTools.SelectedTool;
                var selecttool = CurrentTools.SelectTool;
                if (tool == selecttool)
                {
                    selecttool.CancelSelection();
                }
                else
                {
                    tool.Cancel();
                }
                Invalidate();
            });
            InputUtils.RegisterHotkey(Hotkey.ToolCopy, () => !Track.Playing &&
                                      CurrentTools.SelectedTool == CurrentTools.SelectTool, () =>
            {
                CurrentTools.SelectTool.Copy();
                Invalidate();
            },
                                      null,
                                      repeat: false);
            InputUtils.RegisterHotkey(Hotkey.ToolCut, () => !Track.Playing &&
                                      CurrentTools.SelectedTool == CurrentTools.SelectTool, () =>
            {
                CurrentTools.SelectTool.Cut();
                Invalidate();
            },
                                      null,
                                      repeat: false);
            InputUtils.RegisterHotkey(Hotkey.ToolPaste, () => !Track.Playing &&
                                      (CurrentTools.SelectedTool == CurrentTools.SelectTool ||
                                       CurrentTools.SelectedTool == CurrentTools.MoveTool), () =>
            {
                CurrentTools.SelectTool.Paste();
                Invalidate();
            },
                                      null,
                                      repeat: false);
            InputUtils.RegisterHotkey(Hotkey.ToolDelete, () => !Track.Playing &&
                                      CurrentTools.SelectedTool == CurrentTools.SelectTool, () =>
            {
                CurrentTools.SelectTool.Delete();
                Invalidate();
            },
                                      null,
                                      repeat: false);
        }
コード例 #4
0
ファイル: DrawPanel.xaml.cs プロジェクト: 2276225819/prpaint
        public DrawPanel()
        {
            Current = this;
            this.InitializeComponent();
            Dispatcher.RunIdleAsync((_) => {
                if (Layers == null)
                {
                    return;
                }
                var loc = false;

                Layers.CollectionChanged += async(s, e) => {
                    if (loc)
                    {
                        return;
                    }
                    loc = true;
                    await Dispatcher.RunIdleAsync(x => {
                        for (int i = 0; i < LAYS.Items.Count; i++)
                        {
                            ((FrameworkElement)LAYS.ContainerFromIndex(i))?.SetValue(Canvas.ZIndexProperty, LAYS.Items.Count - i);
                        }
                        loc = false;
                    });
                };

                Window.Current.Content.AddHandler(PointerPressedEvent, (PointerEventHandler) delegate(object s, PointerRoutedEventArgs e) {
                    bool?find(FrameworkElement ee)
                    {
                        if (ee?.Name == "ExpandButton")
                        {
                            return(null);
                        }
                        if (ee == null)
                        {
                            return(false);
                        }
                        if (ee == this)
                        {
                            return(true);
                        }
                        return(find(VisualTreeHelper.GetParent(ee) as FrameworkElement));
                    }
                    if (find(e.OriginalSource as FrameworkElement) is bool b)
                    {
                        CurrentTools.setState(this, b, CurrentLayer);
                    }
                }, true);
            }).ToString();

            //BUG 丢指针后重置 改之后一定要真机触摸屏测试
            //var check = false;
            ManipulationCompleted += (s, e) => {
                if (State == MyEnum.Draw || Ev.Count == 0)
                {
                    return;
                }
                Ev.Clear();
                Debug.WriteLine("COMPLETE BUG");
            };
            PointerEntered += (s, e) => {
                IsFocus = true;
                //Debug.WriteLine("FA");
            };
            PointerExited += (s, e) => {
                if (e.OriginalSource is FrameworkElement r)
                {
                    if (r.BaseUri == null)
                    {
                        Debug.WriteLine("BUG Exited");
                        return; //bug
                    }
                }

                IsFocus = false;
                //Debug.WriteLine("FB");
                if (!e.Pointer.IsInContact)
                {
                    return;
                }
                OnExited(s, e);
                Debug.WriteLine("FIXME");
            };
        }
コード例 #5
0
        private void RegisterEditorHotkeys()
        {
            InputUtils.RegisterHotkey(Hotkey.ToggleAll, () => !Track.Playing, () =>
            {
                if (Settings.ToggleConfig)
                {
                    if (Settings.ConfigTContactPoints)
                    {
                        Settings.Editor.DrawContactPoints = true;
                    }
                    if (Settings.ConfigTGravityWells)
                    {
                        Settings.Editor.RenderGravityWells = true;
                    }
                    if (Settings.ConfigTHitTest)
                    {
                        Settings.Editor.HitTest = true;
                    }
                    if (Settings.ConfigTMomentumVectors)
                    {
                        Settings.Editor.MomentumVectors = true;
                    }
                    if (Settings.ConfigTOnionSkinning)
                    {
                        Settings.OnionSkinning = true;
                    }
                    Settings.ToggleConfig = false;
                }
                else
                {
                    if (Settings.ConfigTContactPoints)
                    {
                        Settings.Editor.DrawContactPoints = false;
                    }
                    if (Settings.ConfigTGravityWells)
                    {
                        Settings.Editor.RenderGravityWells = false;
                    }
                    if (Settings.ConfigTHitTest)
                    {
                        Settings.Editor.HitTest = false;
                    }
                    if (Settings.ConfigTMomentumVectors)
                    {
                        Settings.Editor.MomentumVectors = false;
                    }
                    if (Settings.ConfigTOnionSkinning)
                    {
                        Settings.OnionSkinning = false;
                    }
                    Settings.ToggleConfig = true;
                }
            });

            InputUtils.RegisterHotkey(Hotkey.ScenerySetSmall, () => !Track.Playing, () =>
            {
                var toolswatch             = CurrentTools.SelectedTool.Swatch;
                toolswatch.GreenMultiplier = 0.1f;
            });
            InputUtils.RegisterHotkey(Hotkey.SceneryIncreaseBig, () => !Track.Playing, () =>
            {
                var toolswatch             = CurrentTools.SelectedTool.Swatch;
                toolswatch.GreenMultiplier = (float)Math.Round(Math.Min(25.5f, toolswatch.GreenMultiplier + 0.10f), 2);
            });
            InputUtils.RegisterHotkey(Hotkey.SceneryDecreaseBig, () => !Track.Playing, () =>
            {
                var toolswatch             = CurrentTools.SelectedTool.Swatch;
                toolswatch.GreenMultiplier = (float)Math.Round(Math.Max(0.1f, toolswatch.GreenMultiplier - 0.10f), 2);
            });

            InputUtils.RegisterHotkey(Hotkey.AccelerationSetSmall, () => !Track.Playing, () =>
            {
                var toolswatch           = CurrentTools.SelectedTool.Swatch;
                toolswatch.RedMultiplier = 1;
            });
            InputUtils.RegisterHotkey(Hotkey.AccelerationSetMedium, () => !Track.Playing, () =>
            {
                var toolswatch           = CurrentTools.SelectedTool.Swatch;
                toolswatch.RedMultiplier = 100;
            });
            InputUtils.RegisterHotkey(Hotkey.AccelerationSetLarge, () => !Track.Playing, () =>
            {
                var toolswatch           = CurrentTools.SelectedTool.Swatch;
                toolswatch.RedMultiplier = 200;
            });
            InputUtils.RegisterHotkey(Hotkey.AccelerationSetMax, () => !Track.Playing, () =>
            {
                var toolswatch           = CurrentTools.SelectedTool.Swatch;
                toolswatch.RedMultiplier = 255;
            });

            InputUtils.RegisterHotkey(Hotkey.EditorPencilTool, () => !Track.Playing, () =>
            {
                CurrentTools.SetTool(CurrentTools.PencilTool);
            });
            InputUtils.RegisterHotkey(Hotkey.EditorLineTool, () => !Track.Playing, () =>
            {
                CurrentTools.SetTool(CurrentTools.LineTool);
            });
            InputUtils.RegisterHotkey(Hotkey.EditorEraserTool, () => !Track.Playing, () =>
            {
                CurrentTools.SetTool(CurrentTools.EraserTool);
            });
            InputUtils.RegisterHotkey(Hotkey.EditorSelectTool, () => !Track.Playing, () =>
            {
                CurrentTools.SetTool(CurrentTools.MoveTool);
            });
            InputUtils.RegisterHotkey(Hotkey.EditorPanTool, () => !Track.Playing, () =>
            {
                CurrentTools.SetTool(CurrentTools.HandTool);
            });
            InputUtils.RegisterHotkey(Hotkey.EditorQuickPan, () => !Track.Playing && !Canvas.IsModalOpen, () =>
            {
                CurrentTools.QuickPan = true;
                Invalidate();
                UpdateCursor();
            },
                                      () =>
            {
                CurrentTools.QuickPan = false;
                Invalidate();
                UpdateCursor();
            });
            InputUtils.RegisterHotkey(Hotkey.EditorDragCanvas, () => !Track.Playing && !Canvas.IsModalOpen, () =>
            {
                var mouse             = InputUtils.GetMouse();
                CurrentTools.QuickPan = true;
                CurrentTools.HandTool.OnMouseDown(new Vector2d(mouse.X, mouse.Y));
            },
                                      () =>
            {
                if (CurrentTools.QuickPan)
                {
                    var mouse = InputUtils.GetMouse();
                    CurrentTools.HandTool.OnMouseUp(new Vector2d(mouse.X, mouse.Y));
                    CurrentTools.QuickPan = false;
                }
            });

            InputUtils.RegisterHotkey(Hotkey.EditorUndo, () => !Track.Playing, () =>
            {
                CurrentTools.SelectedTool.Cancel();
                var hint = Track.UndoManager.Undo();
                CurrentTools.SelectedTool.OnUndoRedo(true, hint);
                Invalidate();
            },
                                      null,
                                      repeat: true);
            InputUtils.RegisterHotkey(Hotkey.EditorRedo, () => !Track.Playing, () =>
            {
                CurrentTools.SelectedTool.Cancel();
                var hint = Track.UndoManager.Redo();
                CurrentTools.SelectedTool.OnUndoRedo(false, hint);
                Invalidate();
            },
                                      null,
                                      repeat: true);
            InputUtils.RegisterHotkey(Hotkey.EditorRemoveLatestLine, () => !Track.Playing, () =>
            {
                if (!Track.Playing)
                {
                    StopTools();
                    using (var trk = Track.CreateTrackWriter())
                    {
                        CurrentTools.SelectedTool.Stop();
                        var l = trk.GetNewestLine();
                        if (l != null)
                        {
                            Track.UndoManager.BeginAction();
                            trk.RemoveLine(l);
                            Track.UndoManager.EndAction();
                        }

                        Track.NotifyTrackChanged();
                        Invalidate();
                    }
                }
            },
                                      null,
                                      repeat: true);
            InputUtils.RegisterHotkey(Hotkey.EditorFocusStart, () => !Track.Playing, () =>
            {
                using (var trk = Track.CreateTrackReader())
                {
                    var l = trk.GetOldestLine();
                    if (l != null)
                    {
                        Track.Camera.SetFrameCenter(l.Position);
                        Invalidate();
                    }
                }
            });
            InputUtils.RegisterHotkey(Hotkey.EditorFocusLastLine, () => !Track.Playing, () =>
            {
                using (var trk = Track.CreateTrackReader())
                {
                    var l = trk.GetNewestLine();
                    if (l != null)
                    {
                        Track.Camera.SetFrameCenter(l.Position);
                        Invalidate();
                    }
                }
            });
            InputUtils.RegisterHotkey(Hotkey.EditorCycleToolSetting, () => !Track.Playing, () =>
            {
                if (CurrentTools.SelectedTool.ShowSwatch)
                {
                    CurrentTools.SelectedTool.Swatch.IncrementSelectedMultiplier();
                    Invalidate();
                }
            });
            InputUtils.RegisterHotkey(Hotkey.ToolToggleOverlay, () => !Track.Playing, () =>
            {
                Settings.Local.TrackOverlay = !Settings.Local.TrackOverlay;
            });
            InputUtils.RegisterHotkey(Hotkey.EditorToolColor1, () => !Track.Playing, () =>
            {
                var swatch = CurrentTools.SelectedTool.Swatch;
                if (swatch != null)
                {
                    swatch.Selected = LineType.Blue;
                }
                Invalidate();
            });
            InputUtils.RegisterHotkey(Hotkey.EditorToolColor2, () => !Track.Playing, () =>
            {
                var swatch = CurrentTools.SelectedTool.Swatch;
                if (swatch != null)
                {
                    swatch.Selected = LineType.Red;
                }
                Invalidate();
            });
            InputUtils.RegisterHotkey(Hotkey.EditorToolColor3, () => !Track.Playing, () =>
            {
                var swatch = CurrentTools.SelectedTool.Swatch;
                if (swatch != null)
                {
                    swatch.Selected = LineType.Scenery;
                }
                Invalidate();
            });
            InputUtils.RegisterHotkey(Hotkey.EditorFocusFlag, () => !Track.Playing, () =>
            {
                var flag = Track.GetFlag();
                if (flag != null)
                {
                    Track.Camera.SetFrameCenter(flag.State.CalculateCenter());
                    Invalidate();
                }
            });
            InputUtils.RegisterHotkey(Hotkey.EditorFocusRider, () => !Track.Playing, () =>
            {
                Track.Camera.SetFrameCenter(Track.RenderRider.CalculateCenter());
                Invalidate();
            });
            InputUtils.RegisterHotkey(Hotkey.EditorCancelTool,
                                      () => CurrentTools.SelectedTool.Active,
                                      () =>
            {
                var tool       = CurrentTools.SelectedTool;
                var selecttool = CurrentTools.SelectTool;
                if (tool == selecttool)
                {
                    selecttool.CancelSelection();
                }
                else
                {
                    tool.Cancel();
                }
                Invalidate();
            });
            InputUtils.RegisterHotkey(Hotkey.ToolCopy, () => !Track.Playing &&
                                      CurrentTools.SelectedTool == CurrentTools.SelectTool, () =>
            {
                CurrentTools.SelectTool.Copy();
                Invalidate();
            },
                                      null,
                                      repeat: false);
            InputUtils.RegisterHotkey(Hotkey.ToolCut, () => !Track.Playing &&
                                      CurrentTools.SelectedTool == CurrentTools.SelectTool, () =>
            {
                CurrentTools.SelectTool.Cut();
                Invalidate();
            },
                                      null,
                                      repeat: false);
            InputUtils.RegisterHotkey(Hotkey.ToolPaste, () => !Track.Playing &&
                                      (CurrentTools.SelectedTool == CurrentTools.SelectTool ||
                                       CurrentTools.SelectedTool == CurrentTools.MoveTool), () =>
            {
                CurrentTools.SelectTool.Paste();
                Invalidate();
            },
                                      null,
                                      repeat: false);
            InputUtils.RegisterHotkey(Hotkey.ToolDelete, () => !Track.Playing &&
                                      CurrentTools.SelectedTool == CurrentTools.SelectTool, () =>
            {
                CurrentTools.SelectTool.Delete();
                Invalidate();
            },
                                      null,
                                      repeat: false);
        }