public XBezierEditor( INativeConverter nativeConverter, ICanvasFactory canvasFactory, IBoundsFactory boundsFactory, ICanvas canvas) { _canvas = canvas; Name = "Bézier"; Key = "B"; Modifiers = ""; var moves = _canvas.Moves.Where(_ => _canvas.IsCaptured); var drags = Observable.Merge(_canvas.Downs, _canvas.Ups, moves); _downs = _canvas.Downs.Where(_ => IsEnabled).Subscribe(p => { if (_canvas.IsCaptured) { switch (_state) { case State.Start: { //_xb.Point3.X = p.X; //_xb.Point3.Y = p.Y; //_nb.Point3 = _xb.Point3; //_xb.Point2.X = p.X; //_xb.Point2.Y = p.Y; //_nb.Point2 = _xb.Point2; #if CONNECTORS ConnectPoint3(p); #endif _nb.Bounds.Update(); _canvas.Render(null); _state = State.Point1; } break; case State.Point1: { //_xb.Point1.X = p.X; //_xb.Point1.Y = p.Y; //_nb.Point1 = _xb.Point1; #if CONNECTORS ConnectPoint1(p); #endif _nb.Bounds.Update(); _canvas.Render(null); _state = State.Point2; } break; case State.Point2: { //_xb.Point2.X = p.X; //_xb.Point2.Y = p.Y; //_nb.Point2 = _xb.Point2; #if CONNECTORS ConnectPoint2(p); #endif _nb.Bounds.Hide(); _canvas.Render(null); _state = State.None; _canvas.ReleaseCapture(); } break; } } else { _xb = canvasFactory.CreateBezier(); _xb.Start.X = p.X; _xb.Start.Y = p.Y; _xb.Point1.X = p.X; _xb.Point1.Y = p.Y; _xb.Point2.X = p.X; _xb.Point2.Y = p.Y; _xb.Point3.X = p.X; _xb.Point3.Y = p.Y; _nb = nativeConverter.Convert(_xb); _canvas.History.Snapshot(_canvas); #if CONNECTORS ConnectStart(p); #endif _canvas.Add(_nb); _nb.Bounds = boundsFactory.Create(_canvas, _nb); _nb.Bounds.Update(); _nb.Bounds.Show(); _canvas.Render(null); _canvas.Capture(); _state = State.Start; } }); _drags = drags.Where(_ => IsEnabled).Subscribe(p => { switch (_state) { case State.Start: { _xb.Point3.X = p.X; _xb.Point3.Y = p.Y; _nb.Point3 = _xb.Point3; _xb.Point2.X = p.X; _xb.Point2.Y = p.Y; _nb.Point2 = _xb.Point2; _nb.Bounds.Update(); _canvas.Render(null); } break; case State.Point1: { _xb.Point1.X = p.X; _xb.Point1.Y = p.Y; _nb.Point1 = _xb.Point1; _nb.Bounds.Update(); _canvas.Render(null); } break; case State.Point2: { _xb.Point2.X = p.X; _xb.Point2.Y = p.Y; _nb.Point2 = _xb.Point2; _nb.Bounds.Update(); _canvas.Render(null); } break; } }); }
public XLineEditor( INativeConverter nativeConverter, ICanvasFactory canvasFactory, IBoundsFactory boundsFactory, ICanvas canvas) { _canvas = canvas; Name = "Line"; Key = "L"; Modifiers = ""; var moves = _canvas.Moves.Where(_ => _canvas.IsCaptured); var drags = Observable.Merge(_canvas.Downs, _canvas.Ups, moves); _downs = _canvas.Downs.Where(_ => IsEnabled).Subscribe(p => { if (_canvas.IsCaptured) { //_xline.Point2.X = p.X; //_xline.Point2.Y = p.Y; //_nline.Point2 = _xline.Point2; #if CONNECTORS ConnectPoint2(p); #endif _nline.Bounds.Hide(); _canvas.Render(null); _state = State.None; _canvas.ReleaseCapture(); } else { _xline = canvasFactory.CreateLine(); _xline.Point1.X = p.X; _xline.Point1.Y = p.Y; _xline.Point2.X = p.X; _xline.Point2.Y = p.Y; _nline = nativeConverter.Convert(_xline); _canvas.History.Snapshot(_canvas); #if CONNECTORS ConnectPoint1(p); #endif _canvas.Add(_nline); _nline.Bounds = boundsFactory.Create(_canvas, _nline); _nline.Bounds.Update(); _nline.Bounds.Show(); _canvas.Capture(); _canvas.Render(null); _state = State.End; } }); _drags = drags.Where(_ => IsEnabled).Subscribe(p => { if (_state == State.End) { _xline.Point2.X = p.X; _xline.Point2.Y = p.Y; _nline.Point2 = _xline.Point2; _nline.Bounds.Update(); _canvas.Render(null); } }); }