public EditorState(IChangeDrawingState subject) { _subject = subject; StartAction = new EditorAction((MouseDownPosition) => { }); ContinueAction = new EditorAction((currentMousePosition) => { }); FinishAction = new EditorAction((mouseUpPostion) => { }); _subject.IsOperationInProcess = true; _captureMouse = true; }
public RegularTriangleDrawingState(IChangeDrawingState subject) : base(subject) { _startDrawing3PointBase = _startActions[2]; _startActions[2] = (mouseDownPosition) => { _startDrawing3PointBase(RegularTriangle3Point(_trianglePoints, mouseDownPosition)); }; _continueDrawing3PointBase = _continueActions[3]; _continueActions[3] = (mouseDownPosition) => { _continueDrawing3PointBase(RegularTriangle3Point(_trianglePoints, mouseDownPosition)); }; }
public TriangleDrawingState(IChangeDrawingState subject) : base(subject) { _trianglePoints = new PointCollection(); _startActions = new Dictionary <int, EditorAction>(2); _startActions[0] = (mouseDownPosition) => { var polyline = new Polyline(); (_subject.CurrentImage.Child as Canvas).Children.Add(polyline); _subject.CurrentFigure = polyline; _trianglePoints = new PointCollection(); _trianglePoints.Add(mouseDownPosition); (_subject.CurrentFigure as Polyline).Points = _trianglePoints; }; _startActions[2] = (mouseDownPosition) => { _trianglePoints.Add(mouseDownPosition); var triangle = new Polygon() { Focusable = true }; triangle.Points = _trianglePoints; var image = _subject.CurrentImage.Child as Canvas; Canvas.SetTop(triangle, 0); Canvas.SetLeft(triangle, 0); image.Children.Remove(_subject.CurrentFigure); image.Children.Add(triangle); _subject.CurrentFigure = triangle; }; StartAction = (mouseDownPosition) => { if (_subject.CurrentImage == null) { return; } _startActions[_trianglePoints.Count](mouseDownPosition); }; _continueActions = new Dictionary <int, EditorAction>(3); _continueActions[1] = (currentCursorPosition) => { (_subject.CurrentFigure as Polyline).Points.Add(currentCursorPosition); }; _continueActions[2] = (currentCursorPosition) => { (_subject.CurrentFigure as Polyline).Points[1] = currentCursorPosition; }; _continueActions[3] = (currentCursorPosition) => { (_subject.CurrentFigure as Polygon).Points[2] = currentCursorPosition; }; ContinueAction = (currentCursorPosition) => { if (_subject.CurrentImage == null) { return; } _continueActions[_trianglePoints.Count](currentCursorPosition); }; FinishAction = (mouseUpPosition) => { if (_subject.CurrentImage == null) { return; } if (_trianglePoints.Count == 3) { if (PositionOfPointYToLineBySegment(_trianglePoints[0], _trianglePoints[1], _trianglePoints[2]) == 0) { (_subject.CurrentImage.Child as Canvas).Children.Remove(_subject.CurrentFigure); _subject.CurrentFigure = null; } Reset(); } }; }
public ImageDrawingState(IChangeDrawingState subject) : base(subject) { _firstPoint = new Point(); StartAction = (Point mouseDownPosition) => { _firstPoint = mouseDownPosition; _image = new Border() { Height = 0, Width = 0, Background = Brushes.Transparent }; Canvas.SetLeft(_image, mouseDownPosition.X); Canvas.SetTop(_image, mouseDownPosition.Y); _subject.Canvas.Children.Add(_image); _subject.CurrentImage = _image; }; ContinueAction = (Point currentCursorPosition) => { double width = currentCursorPosition.X - _firstPoint.X; double height = currentCursorPosition.Y - _firstPoint.Y; if (width >= 0) { _image.Width = width; } else { _image.Width = Math.Abs(width); Canvas.SetLeft(_image, _firstPoint.X + width); } if (height >= 0) { _image.Height = height; } else { _image.Height = Math.Abs(height); Canvas.SetTop(_image, _firstPoint.Y + height); } }; FinishAction = (mouseUpPosition) => { if (_image.Width == 0 || _image.Height == 0 || _image.BorderThickness.Left + _image.BorderThickness.Right >= _image.Width || _image.BorderThickness.Top + _image.BorderThickness.Bottom >= _image.Height) { _subject.Canvas.Children.Remove(_image); _subject.CurrentImage = null; } else { _image.Child = new Canvas() { Width = _image.Width - _image.BorderThickness.Left - _image.BorderThickness.Right, Height = _image.Height - _image.BorderThickness.Top - _image.BorderThickness.Bottom, Background = _subject.Canvas.Background, ClipToBounds = true, IsHitTestVisible = true }; _subject.FireCurrentElementsEvents(CurrentElement.Image); } Reset(); }; }