/// <summary> /// /// </summary> private void InitializeDrawable() { var context = this.DataContext as EditorContext; if (context == null) { return; } context.Invalidate = () => { InitializeLayers(); ResizeDrawable(); var container = context.Editor.Project.CurrentContainer; if (container != null) { container.Invalidate(); } }; _state = new ZoomState(context); context.Commands.ZoomResetCommand = Command.Create( () => { _state.ResetZoom(); if (context.Invalidate != null) { context.Invalidate(); } }, () => true); context.Commands.ZoomExtentCommand = Command.Create( () => { _state.AutoFit(); if (context.Invalidate != null) { context.Invalidate(); } }, () => true); this.PointerPressed += (sender, e) => { if (_state == null) { return; } var p = e.GetPosition(this); if (e.MouseButton == MouseButton.Middle) { _state.MiddleDown(p.X, p.Y); // TODO: this.Cursor = Cursors.Pointer; } if (e.MouseButton == MouseButton.Left) { this.Focus(); _state.PrimaryDown(p.X, p.Y); } if (e.MouseButton == MouseButton.Right) { this.Focus(); _state.AlternateDown(p.X, p.Y); } }; this.PointerReleased += (sender, e) => { if (_state == null) { return; } var p = e.GetPosition(this); if (e.MouseButton == MouseButton.Middle) { this.Focus(); _state.MiddleUp(p.X, p.Y); // TODO: this.Cursor = Cursors.Default; } if (e.MouseButton == MouseButton.Left) { this.Focus(); _state.PrimaryUp(p.X, p.Y); } if (e.MouseButton == MouseButton.Right) { this.Focus(); _state.AlternateUp(p.X, p.Y); } }; this.PointerMoved += (sender, e) => { if (_state == null) { return; } var p = e.GetPosition(this); _state.Move(p.X, p.Y); }; this.PointerWheelChanged += (sender, e) => { if (_state == null) { return; } var p = e.GetPosition(this); _state.Wheel(p.X, p.Y, e.Delta.Y); }; }