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(); }; }
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; }
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); }
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"); }; }
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); }