public DrawingToolsVM(Window parent, CanvasControlVM canvasControl, double fps) { var pencilTool = new PencilTool(_control.DrawingPanel, (x) => _window.GetDrawingColor(x), ChangeLine, fps); var lineTool = new LineTool(_control.DrawingPanel, (x) => _window.GetDrawingColor(x), () => pencilTool.Thickness, ChangeLine); var pickerTool = new PickerTool(_control.DrawingPanel, canvasControl.View, (x, y) => _window.SetDrawingColor(x, y)); _control.DrawingPanel.Children.Add(canvasControl.View); _control.Loaded += (s, e) => Control_Loaded(pencilTool, lineTool, pickerTool, parent); }
public MainWindow() { InitializeComponent(); int max_fps = 40; var tcpClient = new TcpServerConnection(); var udpClient = new UdpServerConnection(); var canvas = new CanvasControlVM(); var drawingTools = new DrawingToolsVM(this, canvas, max_fps); var serverConnection = new ServerConnectionVM(tcpClient); KeyDown += (s, e) => { if (Keyboard.Modifiers != ModifierKeys.Control) { return; } if (e.Key == Key.X) { canvas.Clear(); } if (e.Key == Key.S) { SaveFileDialog saveFileDialog = new SaveFileDialog { FileName = "unnamed.png" }; if (saveFileDialog.ShowDialog() == true) { canvas.Picture.Save(saveFileDialog.FileName, ImageFormat.Png); } } if (e.Key == Key.T) { drawingTools.OpenToolWindow(); } }; serverConnection.PropertyChanged += (s, e) => { if (serverConnection.IsServerConnected) { udpClient.Address = serverConnection.Address; } else { udpClient.Stop(); } }; serverConnection.RoomChanged += () => udpClient.Start(serverConnection.RoomID); drawingTools.LineDrawn += () => { canvas.DrawLine(drawingTools.DrawnLine); udpClient.SendLine(drawingTools.DrawnLine); }; udpClient.LineReceived += () => Dispatcher.Invoke(() => canvas.DrawLine(udpClient.ReceivedLine.Retrieve(x => x))); udpClient.Disconnected += () => Dispatcher.Invoke(() => tcpClient.Disconnect()); var visSwitch = new VisibilitySwitchView(); visSwitch.DisplayedContent.Content = serverConnection.View; WPFContent.Content = drawingTools.View; ConnectionControls.Content = visSwitch; }