// Be sure to call the base class constructor. public RemoteSelectionAdorner(UIElement adornedElement, CustomStroke stroke, CustomInkCanvas canvas) : base(adornedElement) { adornedStroke = stroke; this.stroke = stroke; this.canvas = canvas; visualChildren = new VisualCollection(this); border = new Path(); if (stroke is ShapeStroke) { Point center = stroke.GetCenter(); RotateTransform rotation = new RotateTransform((stroke as ShapeStroke).shapeStyle.rotation, center.X, center.Y); fill = new RectangleGeometry(stroke.GetCustomBound(), 0, 0, rotation); border.Data = fill; border.StrokeThickness = 2; } else { border.Data = stroke.GetGeometry(); border.StrokeThickness = (stroke as LinkStroke).getThickness(); } border.Stroke = (Brush) new BrushConverter().ConvertFromString("#CC7F7F"); visualChildren.Add(border); }
// Be sure to call the base class constructor. public EditionAdorner(UIElement adornedElement, CustomStroke stroke, CustomInkCanvas canvas) : base(adornedElement) { adornedStroke = stroke; this.stroke = stroke; this.canvas = canvas; Point center = stroke.GetCenter(); if (stroke is ShapeStroke) { rotationDelete = new RotateTransform((stroke as ShapeStroke).shapeStyle.rotation, -20 - (stroke as ShapeStroke).shapeStyle.width / 2, 20 + (stroke as ShapeStroke).shapeStyle.height / 2); } else { rotationDelete = new RotateTransform(0, 0, 0); } if (stroke is ShapeStroke) { rotationEdit = new RotateTransform((stroke as ShapeStroke).shapeStyle.rotation, -(stroke as ShapeStroke).shapeStyle.width / 2, 20 + (stroke as ShapeStroke).shapeStyle.height / 2); } else { rotationEdit = new RotateTransform(0, 0, 0); } rectangleEdit = new Rect(stroke.GetCustomBound().TopRight.X, stroke.GetCustomBound().TopRight.Y - 20, 20, 20); rectangleDelete = new Rect(stroke.GetCustomBound().TopRight.X + 20, stroke.GetCustomBound().TopRight.Y - 20, 20, 20); AddButtons(stroke, canvas); }
public AnchorPointAdorner(UIElement adornedElement, CustomStroke customStroke, CustomInkCanvas actualCanvas) : base(adornedElement) { adornedStroke = customStroke; visualChildren = new VisualCollection(this); linkPreview = new Path(); linkPreview.Stroke = Brushes.Gray; linkPreview.StrokeThickness = 2; visualChildren.Add(linkPreview); shapeStroke = customStroke as ShapeStroke; canvas = actualCanvas; // rotation initiale de la stroke (pour dessiner le rectangle) // Bug. Cheat, but the geometry, the selection Rectangle (newRect) should be the right one.. geom of the stroke? strokeBounds = customStroke.GetCustomBound(); Point center = customStroke.GetCenter(); rotation = new RotateTransform((customStroke as ShapeStroke).shapeStyle.rotation, center.X, center.Y); anchors = new List <Thumb>(); anchors.Add(new Thumb()); anchors.Add(new Thumb()); anchors.Add(new Thumb()); anchors.Add(new Thumb()); foreach (Thumb anchor in anchors) { anchor.Cursor = Cursors.ScrollAll; anchor.Width = 6; anchor.Height = 6; anchor.Background = Brushes.DodgerBlue; anchor.BorderBrush = Brushes.Black; anchor.BorderThickness = new Thickness(2); anchor.Margin = new Thickness(0); anchor.DragStarted += new DragStartedEventHandler(dragHandle_DragStarted); anchor.DragDelta += new DragDeltaEventHandler(dragHandle_DragDelta); anchor.DragCompleted += new DragCompletedEventHandler(dragHandle_DragCompleted); visualChildren.Add(anchor); } cheatAnchors = new List <StrokeAnchorPointThumb>(); cheatAnchors.Add(new StrokeAnchorPointThumb(shapeStroke, canvas, 0)); cheatAnchors.Add(new StrokeAnchorPointThumb(shapeStroke, canvas, 1)); cheatAnchors.Add(new StrokeAnchorPointThumb(shapeStroke, canvas, 2)); cheatAnchors.Add(new StrokeAnchorPointThumb(shapeStroke, canvas, 3)); foreach (Thumb cheatAnchor in cheatAnchors) { cheatAnchor.Cursor = Cursors.SizeNWSE; cheatAnchor.Width = 1; cheatAnchor.Height = 1; canvas.Children.Add(cheatAnchor); } strokeBounds = customStroke.GetCustomBound(); }
void Move_DragDelta(object sender, DragDeltaEventArgs e) { Vector dragVect = new Vector(e.HorizontalChange, e.VerticalChange); dragVect = rotation.Value.Transform(dragVect); if (dragVect.X != 0 || dragVect.Y != 0) { rotationPreview.CenterX = customStroke.GetCenter().X + dragVect.X; rotationPreview.CenterY = customStroke.GetCenter().Y + dragVect.Y; Rect rectangle = new Rect(customStroke.GetCustomBound().X + dragVect.X, customStroke.GetCustomBound().Y + dragVect.Y, customStroke.GetCustomBound().Width, customStroke.GetCustomBound().Height); if (customStroke is LinkStroke && (customStroke as LinkStroke).isAttached()) { horizontalChange = e.HorizontalChange; verticalChange = e.VerticalChange; LinkStroke linkStroke = customStroke.Clone() as LinkStroke; linkStroke.path = new List <Coordinates>(); foreach (Coordinates coord in (customStroke as LinkStroke).path) { linkStroke.path.Add(new Coordinates(coord.ToPoint())); } for (int i = 0; i < linkStroke.path.Count; i++) { if (i == 0 && linkStroke.isAttached() && linkStroke.from?.formId != null) { continue; } if (i == linkStroke.path.Count - 1 && linkStroke.isAttached() && linkStroke.to?.formId != null) { continue; } Coordinates coords = linkStroke.path[i]; coords.x += e.HorizontalChange; coords.y += e.VerticalChange; } rectangle = linkStroke.GetStraightBounds(); } generatePreview(rectangle); } }
public RotateAdorner(UIElement adornedElement, CustomStroke strokeToRotate, CustomInkCanvas actualCanvas) : base(adornedElement) { adornedStroke = strokeToRotate; stroke = strokeToRotate; canvas = actualCanvas; // rotation initiale de la stroke (pour dessiner le rectangle) // Bug. Cheat, but the geometry, the selection Rectangle (newRect) should be the right one.. geom of the stroke? strokeBounds = strokeToRotate.GetCustomBound(); center = stroke.GetCenter(); rotation = new RotateTransform((stroke as ShapeStroke).shapeStyle.rotation, center.X, center.Y); visualChildren = new VisualCollection(this); line = new Path(); line.Stroke = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#FF809dce")); line.StrokeThickness = 1; line.Data = new LineGeometry(new Point(center.X, center.Y - strokeBounds.Height / 2 - 10), new Point(center.X, center.Y - strokeBounds.Height / 2 - HANDLEMARGIN)); line.RenderTransform = rotation; visualChildren.Add(line); rotateHandle = new Thumb(); rotateHandle.Cursor = Cursors.Hand; rotateHandle.Width = 10; rotateHandle.Height = 10; rotateHandle.Background = new LinearGradientBrush((Color)ColorConverter.ConvertFromString("#FFc8d4ea"), (Color)ColorConverter.ConvertFromString("#FF809dce"), 45); rotateHandle.DragDelta += new DragDeltaEventHandler(rotateHandle_DragDelta); rotateHandle.DragCompleted += new DragCompletedEventHandler(rotateHandle_DragCompleted); TransformGroup transform = new TransformGroup(); transform.Children.Add(new RotateTransform(rotation.Angle, rotateHandle.Width / 2, rotateHandle.Height / 2 + HANDLEMARGIN + stroke.GetCustomBound().Height / 2)); transform.Children.Add(new TranslateTransform(-canvas.ActualWidth / 2 + strokeBounds.X + strokeBounds.Width / 2, -canvas.ActualHeight / 2 + strokeBounds.Y - HANDLEMARGIN)); rotateHandle.RenderTransform = transform; visualChildren.Add(rotateHandle); rotatePreview = new Path(); rotatePreview.Stroke = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#FFBBBBBB")); rotatePreview.StrokeThickness = 1; visualChildren.Add(rotatePreview); }
public ResizeAdorner(UIElement adornedElement, CustomStroke customStroke, CustomInkCanvas actualCanvas) : base(adornedElement) { if (customStroke is LinkStroke) { WIDTH_LEGER = 1; } adornedStroke = customStroke; visualChildren = new VisualCollection(this); if (customStroke is ShapeStroke) { strokeBounds = customStroke.GetCustomBound(); } else { strokeBounds = (customStroke as LinkStroke).GetStraightBounds(); } resizePreview = new Path(); resizePreview.Stroke = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#FFBBBBBB")); resizePreview.StrokeThickness = 1; visualChildren.Add(resizePreview); this.customStroke = customStroke; canvas = actualCanvas; Point center = customStroke.GetCenter(); if (customStroke is ShapeStroke) { rotation = new RotateTransform((customStroke as ShapeStroke).shapeStyle.rotation, center.X, center.Y); } else { rotation = new RotateTransform(0, center.X, center.Y); } while (rotation.Angle < 0) { rotation.Angle += 360; } outerBoundPath = new Path(); outerBoundPath.Stroke = Brushes.Black; outerBoundPath.StrokeDashArray = new DoubleCollection { 5, 2 }; outerBoundPath.StrokeThickness = 1; Rect rect = customStroke.GetCustomBound(); rect.X -= MARGIN; rect.Y -= MARGIN; rect.Width += MARGIN * 2; rect.Height += MARGIN * 2; outerBoundPath.Data = new RectangleGeometry(rect, 0, 0, rotation); visualChildren.Add(outerBoundPath); moveThumb = new Thumb(); moveThumb.Cursor = Cursors.SizeAll; moveThumb.Height = strokeBounds.Height + MARGIN * 2; moveThumb.Width = strokeBounds.Width + MARGIN * 2; moveThumb.Background = Brushes.Transparent; moveThumb.DragDelta += new DragDeltaEventHandler(Move_DragDelta); moveThumb.DragCompleted += new DragCompletedEventHandler(Move_DragCompleted); moveThumb.DragStarted += new DragStartedEventHandler(All_DragStarted); moveThumb.PreviewMouseUp += new MouseButtonEventHandler(LeftMouseUp); TransformGroup transform = new TransformGroup(); transform.Children.Add(new RotateTransform(rotation.Angle, moveThumb.Width / 2, moveThumb.Height / 2)); transform.Children.Add(new TranslateTransform(-canvas.ActualWidth / 2 + strokeBounds.Width / 2 + strokeBounds.X, -canvas.ActualHeight / 2 + strokeBounds.Height / 2 + strokeBounds.Y)); moveThumb.RenderTransform = transform; visualChildren.Add(moveThumb); unitX = rotation.Value.Transform(unitX); unitY = rotation.Value.Transform(unitY); // RenderTransform = rotation; anchors = new List <Thumb>(); anchors.Add(new Thumb()); anchors.Add(new Thumb()); anchors.Add(new Thumb()); anchors.Add(new Thumb()); anchors.Add(new Thumb()); anchors.Add(new Thumb()); anchors.Add(new Thumb()); anchors.Add(new Thumb()); int index = 0; foreach (Thumb anchor in anchors) { anchor.Width = 8; anchor.Height = 8; anchor.Background = new LinearGradientBrush((Color)ColorConverter.ConvertFromString("#FFc8d4ea"), (Color)ColorConverter.ConvertFromString("#FF809dce"), 45); anchor.BorderBrush = Brushes.Black; if (rotation.Angle % 360 >= 360 - 45 / 2 || rotation.Angle % 360 <= 45 / 2) { switch (index) { case 0: anchor.DragDelta += new DragDeltaEventHandler(Top_DragDelta); anchor.Cursor = Cursors.SizeNS; break; case 1: anchor.DragDelta += new DragDeltaEventHandler(Right_DragDelta); anchor.Cursor = Cursors.SizeWE; break; case 2: anchor.DragDelta += new DragDeltaEventHandler(Bottom_DragDelta); anchor.Cursor = Cursors.SizeNS; break; case 3: anchor.DragDelta += new DragDeltaEventHandler(Left_DragDelta); anchor.Cursor = Cursors.SizeWE; break; case 4: anchor.DragDelta += new DragDeltaEventHandler(TopLeft_DragDelta); anchor.Cursor = Cursors.SizeNWSE; break; case 5: anchor.DragDelta += new DragDeltaEventHandler(TopRight_DragDelta); anchor.Cursor = Cursors.SizeNESW; break; case 6: anchor.DragDelta += new DragDeltaEventHandler(BottomLeft_DragDelta); anchor.Cursor = Cursors.SizeNESW; break; case 7: anchor.DragDelta += new DragDeltaEventHandler(BottomRight_DragDelta); anchor.Cursor = Cursors.SizeNWSE; break; default: break; } } else if (rotation.Angle % 360 > 45 / 2 && rotation.Angle % 360 <= 90 - 45 / 2) { switch (index) { case 0: anchor.DragDelta += new DragDeltaEventHandler(Top_DragDelta); anchor.Cursor = Cursors.SizeNESW; break; case 1: anchor.DragDelta += new DragDeltaEventHandler(Right_DragDelta); anchor.Cursor = Cursors.SizeNWSE; break; case 2: anchor.DragDelta += new DragDeltaEventHandler(Bottom_DragDelta); anchor.Cursor = Cursors.SizeNESW; break; case 3: anchor.DragDelta += new DragDeltaEventHandler(Left_DragDelta); anchor.Cursor = Cursors.SizeNWSE; break; case 4: anchor.DragDelta += new DragDeltaEventHandler(TopLeft_DragDelta); anchor.Cursor = Cursors.SizeNS; break; case 5: anchor.DragDelta += new DragDeltaEventHandler(TopRight_DragDelta); anchor.Cursor = Cursors.SizeWE; break; case 6: anchor.DragDelta += new DragDeltaEventHandler(BottomLeft_DragDelta); anchor.Cursor = Cursors.SizeWE; break; case 7: anchor.DragDelta += new DragDeltaEventHandler(BottomRight_DragDelta); anchor.Cursor = Cursors.SizeNS; break; default: break; } } else if (rotation.Angle % 360 > 90 - 45 / 2 && rotation.Angle % 360 <= 90 + 45 / 2) { switch (index) { case 0: anchor.DragDelta += new DragDeltaEventHandler(Top_DragDelta); anchor.Cursor = Cursors.SizeWE; break; case 1: anchor.DragDelta += new DragDeltaEventHandler(Right_DragDelta); anchor.Cursor = Cursors.SizeNS; break; case 2: anchor.DragDelta += new DragDeltaEventHandler(Bottom_DragDelta); anchor.Cursor = Cursors.SizeWE; break; case 3: anchor.DragDelta += new DragDeltaEventHandler(Left_DragDelta); anchor.Cursor = Cursors.SizeNS; break; case 4: anchor.DragDelta += new DragDeltaEventHandler(TopLeft_DragDelta); anchor.Cursor = Cursors.SizeNESW; break; case 5: anchor.DragDelta += new DragDeltaEventHandler(TopRight_DragDelta); anchor.Cursor = Cursors.SizeNWSE; break; case 6: anchor.DragDelta += new DragDeltaEventHandler(BottomLeft_DragDelta); anchor.Cursor = Cursors.SizeNWSE; break; case 7: anchor.DragDelta += new DragDeltaEventHandler(BottomRight_DragDelta); anchor.Cursor = Cursors.SizeNESW; break; default: break; } } else if (rotation.Angle % 360 > 90 + 45 / 2 && rotation.Angle % 360 <= 135 + 45 / 2) { switch (index) { case 0: anchor.DragDelta += new DragDeltaEventHandler(Top_DragDelta); anchor.Cursor = Cursors.SizeNWSE; break; case 1: anchor.DragDelta += new DragDeltaEventHandler(Right_DragDelta); anchor.Cursor = Cursors.SizeNESW; break; case 2: anchor.DragDelta += new DragDeltaEventHandler(Bottom_DragDelta); anchor.Cursor = Cursors.SizeNWSE; break; case 3: anchor.DragDelta += new DragDeltaEventHandler(Left_DragDelta); anchor.Cursor = Cursors.SizeNESW; break; case 4: anchor.DragDelta += new DragDeltaEventHandler(TopLeft_DragDelta); anchor.Cursor = Cursors.SizeWE; break; case 5: anchor.DragDelta += new DragDeltaEventHandler(TopRight_DragDelta); anchor.Cursor = Cursors.SizeNS; break; case 6: anchor.DragDelta += new DragDeltaEventHandler(BottomLeft_DragDelta); anchor.Cursor = Cursors.SizeNS; break; case 7: anchor.DragDelta += new DragDeltaEventHandler(BottomRight_DragDelta); anchor.Cursor = Cursors.SizeWE; break; default: break; } } else if (rotation.Angle % 360 > 180 - 45 / 2 && rotation.Angle % 360 <= 180 + 45 / 2) { switch (index) { case 0: anchor.DragDelta += new DragDeltaEventHandler(Top_DragDelta); anchor.Cursor = Cursors.SizeNS; break; case 1: anchor.DragDelta += new DragDeltaEventHandler(Right_DragDelta); anchor.Cursor = Cursors.SizeWE; break; case 2: anchor.DragDelta += new DragDeltaEventHandler(Bottom_DragDelta); anchor.Cursor = Cursors.SizeNS; break; case 3: anchor.DragDelta += new DragDeltaEventHandler(Left_DragDelta); anchor.Cursor = Cursors.SizeWE; break; case 4: anchor.DragDelta += new DragDeltaEventHandler(TopLeft_DragDelta); anchor.Cursor = Cursors.SizeNWSE; break; case 5: anchor.DragDelta += new DragDeltaEventHandler(TopRight_DragDelta); anchor.Cursor = Cursors.SizeNESW; break; case 6: anchor.DragDelta += new DragDeltaEventHandler(BottomLeft_DragDelta); anchor.Cursor = Cursors.SizeNESW; break; case 7: anchor.DragDelta += new DragDeltaEventHandler(BottomRight_DragDelta); anchor.Cursor = Cursors.SizeNWSE; break; default: break; } } else if (rotation.Angle % 360 > 225 - 45 / 2 && rotation.Angle % 360 <= 225 + 45 / 2) { switch (index) { case 0: anchor.DragDelta += new DragDeltaEventHandler(Top_DragDelta); anchor.Cursor = Cursors.SizeNESW; break; case 1: anchor.DragDelta += new DragDeltaEventHandler(Right_DragDelta); anchor.Cursor = Cursors.SizeNWSE; break; case 2: anchor.DragDelta += new DragDeltaEventHandler(Bottom_DragDelta); anchor.Cursor = Cursors.SizeNESW; break; case 3: anchor.DragDelta += new DragDeltaEventHandler(Left_DragDelta); anchor.Cursor = Cursors.SizeNWSE; break; case 4: anchor.DragDelta += new DragDeltaEventHandler(TopLeft_DragDelta); anchor.Cursor = Cursors.SizeNS; break; case 5: anchor.DragDelta += new DragDeltaEventHandler(TopRight_DragDelta); anchor.Cursor = Cursors.SizeWE; break; case 6: anchor.DragDelta += new DragDeltaEventHandler(BottomLeft_DragDelta); anchor.Cursor = Cursors.SizeWE; break; case 7: anchor.DragDelta += new DragDeltaEventHandler(BottomRight_DragDelta); anchor.Cursor = Cursors.SizeNS; break; default: break; } } else if (rotation.Angle % 360 > 270 - 45 / 2 && rotation.Angle % 360 <= 270 + 45 / 2) { switch (index) { case 0: anchor.DragDelta += new DragDeltaEventHandler(Top_DragDelta); anchor.Cursor = Cursors.SizeWE; break; case 1: anchor.DragDelta += new DragDeltaEventHandler(Right_DragDelta); anchor.Cursor = Cursors.SizeNS; break; case 2: anchor.DragDelta += new DragDeltaEventHandler(Bottom_DragDelta); anchor.Cursor = Cursors.SizeWE; break; case 3: anchor.DragDelta += new DragDeltaEventHandler(Left_DragDelta); anchor.Cursor = Cursors.SizeNS; break; case 4: anchor.DragDelta += new DragDeltaEventHandler(TopLeft_DragDelta); anchor.Cursor = Cursors.SizeNESW; break; case 5: anchor.DragDelta += new DragDeltaEventHandler(TopRight_DragDelta); anchor.Cursor = Cursors.SizeNWSE; break; case 6: anchor.DragDelta += new DragDeltaEventHandler(BottomLeft_DragDelta); anchor.Cursor = Cursors.SizeNWSE; break; case 7: anchor.DragDelta += new DragDeltaEventHandler(BottomRight_DragDelta); anchor.Cursor = Cursors.SizeNESW; break; default: break; } } else { switch (index) { case 0: anchor.DragDelta += new DragDeltaEventHandler(Top_DragDelta); anchor.Cursor = Cursors.SizeNWSE; break; case 1: anchor.DragDelta += new DragDeltaEventHandler(Right_DragDelta); anchor.Cursor = Cursors.SizeNESW; break; case 2: anchor.DragDelta += new DragDeltaEventHandler(Bottom_DragDelta); anchor.Cursor = Cursors.SizeNWSE; break; case 3: anchor.DragDelta += new DragDeltaEventHandler(Left_DragDelta); anchor.Cursor = Cursors.SizeNESW; break; case 4: anchor.DragDelta += new DragDeltaEventHandler(TopLeft_DragDelta); anchor.Cursor = Cursors.SizeWE; break; case 5: anchor.DragDelta += new DragDeltaEventHandler(TopRight_DragDelta); anchor.Cursor = Cursors.SizeNS; break; case 6: anchor.DragDelta += new DragDeltaEventHandler(BottomLeft_DragDelta); anchor.Cursor = Cursors.SizeNS; break; case 7: anchor.DragDelta += new DragDeltaEventHandler(BottomRight_DragDelta); anchor.Cursor = Cursors.SizeWE; break; default: break; } } anchor.DragStarted += new DragStartedEventHandler(All_DragStarted); anchor.DragCompleted += new DragCompletedEventHandler(All_DragCompleted); if (!(customStroke is LinkStroke) || !(customStroke as LinkStroke).isAttached()) { visualChildren.Add(anchor); } double xOffset = 0; double yOffset = 0; switch (index) { case 0: //Top xOffset = strokeBounds.Width / 2; yOffset = -MARGIN; break; case 1: //Right xOffset = strokeBounds.Width + MARGIN; yOffset = strokeBounds.Height / 2; break; case 2: //Bottom xOffset = strokeBounds.Width / 2; yOffset = strokeBounds.Height + MARGIN; break; case 3: //Left xOffset = -MARGIN; yOffset = strokeBounds.Height / 2; break; case 4: //TopLeft xOffset = -MARGIN; yOffset = -MARGIN; break; case 5: //TopRight xOffset = strokeBounds.Width + MARGIN; yOffset = -MARGIN; break; case 6: //BottomLeft xOffset = -MARGIN; yOffset = strokeBounds.Height + MARGIN; break; case 7: //BottomRight xOffset = strokeBounds.Width + MARGIN; yOffset = strokeBounds.Height + MARGIN; break; default: break; } ArrangeAnchor(anchor, xOffset, yOffset); index++; } rotationPreview = rotation.Clone(); }