/// <summary> /// Attach project editor to container control. /// </summary> public void AttachEditor() { _projectEditor = this.DataContext as ProjectEditor; _containerControl = this.Find<ContainerViewControl>("containerControl"); _zoomBorder = this.Find<ZoomBorder>("zoomBorder"); if (_projectEditor != null && _containerControl != null && _zoomBorder != null) { _projectEditor.Invalidate = () => _containerControl.InvalidateVisual(); _projectEditor.ResetZoom = () => _zoomBorder.Reset(); _projectEditor.AutoFitZoom = () => _zoomBorder.AutoFit(); _projectEditor.LoadLayout = () => { }; _projectEditor.SaveLayout = () => { }; _projectEditor.ResetLayout = () => { }; _zoomBorder.InvalidatedChild = InvalidateChild; _inputProcessor = new InputProcessor( new AvaloniaInputSource( _zoomBorder, _containerControl, _zoomBorder.FixInvalidPointPosition), _projectEditor); } }
/// <summary> /// Initializes a new instance of the <see cref="ProjectObserver"/> class. /// </summary> /// <param name="editor">The current <see cref="ProjectEditor"/> object.</param> public ProjectObserver(ProjectEditor editor) { if (editor?.Project != null) { _editor = editor; _invalidateContainer = () => { }; _invalidateStyles = () => InvalidateAndClearCache(); _invalidateLayers = () => Invalidate(); _invalidateShapes = () => Invalidate(); Add(_editor.Project); } }
/// <summary> /// Detach project editor from container control. /// </summary> public void DetachEditor() { if (_projectEditor != null) { _projectEditor.Invalidate = null; _projectEditor.ResetZoom = null; _projectEditor.AutoFitZoom = null; _projectEditor.LoadLayout = null; _projectEditor.SaveLayout = null; _projectEditor.ResetLayout = null; zoomBorder.InvalidatedChild = null; _inputProcessor.Dispose(); zoomBorder.AllowDrop = false; zoomBorder.DragEnter -= ZoomBorder_DragEnter; zoomBorder.Drop -= ZoomBorder_Drop; } _projectEditor = null; }
/// <summary> /// Attach project editor to container control. /// </summary> public void AttachEditor() { _projectEditor = this.DataContext as ProjectEditor; if (_projectEditor != null) { _projectEditor.Invalidate = () => { }; _projectEditor.ResetZoom = () => zoomBorder.Reset(); _projectEditor.AutoFitZoom = () => zoomBorder.AutoFit(); _projectEditor.LoadLayout = () => OnLoadLayout(); _projectEditor.SaveLayout = () => OnSaveLayout(); _projectEditor.ResetLayout = () => OnResetLayout(); zoomBorder.InvalidatedChild = InvalidateChild; _inputProcessor = new InputProcessor( new WpfInputSource( zoomBorder, drawableControl, (point) => point), _projectEditor); zoomBorder.AllowDrop = true; zoomBorder.DragEnter += ZoomBorder_DragEnter; zoomBorder.Drop += ZoomBorder_Drop; } }
/// <summary> /// Detach project editor from container control. /// </summary> public void DetachEditor() { if (_projectEditor != null && _containerControl != null && _zoomBorder != null) { _projectEditor.Invalidate = null; _projectEditor.ResetZoom = null; _projectEditor.AutoFitZoom = null; _projectEditor.LoadLayout = null; _projectEditor.SaveLayout = null; _projectEditor.ResetLayout = null; _zoomBorder.InvalidatedChild = null; _inputProcessor.Dispose(); } _projectEditor = null; _containerControl = null; _zoomBorder = null; }
public MainWindow(IServiceProvider serviceProvider) { InitializeComponent(); bool isClosing = false; _serviceProvider = serviceProvider; _projectEditor = _serviceProvider.GetService<ProjectEditor>(); _previewWindow = new SvgWindow(); _previewWindow.svgButton.Click += (sender, e) => { UpdateSvg(); }; _previewWindow.Closing += (sender, e) => { if (!isClosing) { _previewWindow.Hide(); e.Cancel = true; } }; Loaded += (seender, e) => { _projectEditor.CurrentTool = _projectEditor.Tools.FirstOrDefault(t => t.Name == "Selection"); _projectEditor.CurrentPathTool = _projectEditor.PathTools.FirstOrDefault(t => t.Name == "Line"); _projectEditor.OnNewProject(); _projectEditor.Invalidate = () => { skiaView.InvalidateVisual(); if (_previewWindow.svgLive.IsChecked == true) { UpdateSvg(); } }; skiaView.Renderer = _projectEditor.Renderers[0]; skiaView.Container = _projectEditor.Project.CurrentContainer; skiaView.Presenter = new EditorPresenter(); skiaView.Focusable = true; skiaView.Focus(); skiaView.InvalidateVisual(); _inputProcessor = new InputProcessor( new WpfInputSource( skiaView, skiaView, skiaView.FixPointOffset), _projectEditor); }; Closing += (sender, e) => { _inputProcessor.Dispose(); isClosing = true; _previewWindow.Close(); }; KeyDown += (sender, e) => { bool isControl = Keyboard.Modifiers == ModifierKeys.Control; if (isControl) { switch (e.Key) { case Key.P: _previewWindow.Show(); break; case Key.N: NewProject(); break; case Key.O: OpenProject(); break; case Key.S: SaveProject(); break; case Key.E: Export(_projectEditor.Project.CurrentContainer); break; case Key.Z: _projectEditor.OnUndo(); break; case Key.Y: _projectEditor.OnRedo(); break; case Key.X: _projectEditor.OnCut(); break; case Key.C: _projectEditor.OnCopy(); break; case Key.V: _projectEditor.OnPaste(); break; case Key.A: _projectEditor.OnSelectAll(); break; case Key.G: _projectEditor.OnGroupSelected(); break; case Key.U: _projectEditor.OnUngroupSelected(); break; } } else { switch (e.Key) { case Key.N: _projectEditor.OnToolNone(); break; case Key.S: _projectEditor.OnToolSelection(); break; case Key.P: _projectEditor.OnToolPoint(); break; case Key.L: _projectEditor.OnToolLine(); break; case Key.A: _projectEditor.OnToolArc(); break; case Key.B: _projectEditor.OnToolCubicBezier(); break; case Key.Q: _projectEditor.OnToolQuadraticBezier(); break; case Key.H: _projectEditor.OnToolPath(); break; case Key.M: _projectEditor.OnToolMove(); break; case Key.R: _projectEditor.OnToolRectangle(); break; case Key.E: _projectEditor.OnToolEllipse(); break; case Key.T: _projectEditor.OnToolText(); break; case Key.I: _projectEditor.OnToolImage(); break; case Key.K: _projectEditor.OnToggleDefaultIsStroked(); break; case Key.F: _projectEditor.OnToggleDefaultIsFilled(); break; case Key.D: _projectEditor.OnToggleDefaultIsClosed(); break; case Key.J: _projectEditor.OnToggleDefaultIsSmoothJoin(); break; case Key.G: _projectEditor.OnToggleSnapToGrid(); break; case Key.C: _projectEditor.OnToggleTryToConnect(); break; case Key.Y: _projectEditor.OnToggleCloneStyle(); break; case Key.Delete: _projectEditor.OnDeleteSelected(); break; case Key.Escape: _projectEditor.OnDeselectAll(); break; } } }; }