using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; using NodeEditor.Extensions; namespace NodeEditor { /// /// Interaction logic for EditorCanvas.xaml /// public partial class EditorCanvas : UserControl { Point dragStart = new Point(); MatrixTransform dragMatrixTransform = new MatrixTransform(); TranslateTransform dragTranslateTransform = new TranslateTransform(); public EditorCanvas() { InitializeComponent(); m_EditorCanvas.MouseMove += MapCanvas_Drag; m_EditorCanvas.MouseDown += MapCanvas_StartDrag; m_EditorCanvas.MouseWheel += MapCanvas_OnScroll; mapCanvas.RenderTransform = MathExtensions.applyMultiTransform(dragTranslateTransform, dragMatrixTransform); } private void MapCanvas_StartDrag(object sender, MouseEventArgs e) { dragStart = e.GetPosition(this); } private void MapCanvas_Drag(object sender, MouseEventArgs e) { if (e.LeftButton == MouseButtonState.Pressed) { var element = sender as UIElement; var transform = dragTranslateTransform; var old = element.TranslatePoint(new Point(0, 0), map); var new_point = old + Point.Subtract(e.GetPosition(this), dragStart); transform.X = new_point.X; transform.Y = new_point.Y; m_EditorCanvas.RenderTransform = MathExtensions.applyMultiTransform(dragTranslateTransform, dragMatrixTransform); test.Text = Point.Subtract(e.GetPosition(this), dragStart).ToString(); } if (e.LeftButton == MouseButtonState.Released) test.Text = ""; } private void MapCanvas_EndDrag(object sender, MouseEventArgs e) { dragStart = new Point(0, 0); } private void MapCanvas_OnScroll(object sender, MouseWheelEventArgs e) { var element = sender as UIElement; var position = e.GetPosition(element); var transform = dragMatrixTransform; var matrix = transform.Matrix; var scale = e.Delta >= 0 ? 1.1 : (1.0 / 1.1); matrix.ScaleAtPrepend(scale, scale, position.X, position.Y); transform.Matrix = matrix; element.RenderTransform = MathExtensions.applyMultiTransform(dragTranslateTransform, dragMatrixTransform); } } }