You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
60 lines
1.4 KiB
60 lines
1.4 KiB
using System; |
|
using System.Collections.Generic; |
|
using System.Linq; |
|
using System.Text; |
|
using SharpDevelop.XamlDesigner.Controls; |
|
using System.Windows; |
|
using System.Windows.Controls; |
|
using System.Windows.Input; |
|
using SharpDevelop.XamlDesigner.Dom; |
|
|
|
namespace SharpDevelop.XamlDesigner |
|
{ |
|
class PointerTool : Tool |
|
{ |
|
public static PointerTool Instance = new PointerTool(); |
|
|
|
SelectionFrame frame; |
|
Rect frameRect; |
|
|
|
SelectionCollection Selection |
|
{ |
|
get { return DesignView.Context.Selection; } |
|
} |
|
|
|
public override void OnMouseClick(AdvancedDragEventArgs e) |
|
{ |
|
var result = DesignView.HitTest(e.StartPoint).FirstOrDefault(); |
|
Selection.Auto(result); |
|
} |
|
|
|
public override void OnDragStarted(AdvancedDragEventArgs e) |
|
{ |
|
frame = new SelectionFrame(); |
|
DesignView.FeedbackLayer.Children.Add(frame); |
|
} |
|
|
|
public override void OnDragDelta(AdvancedDragEventArgs e) |
|
{ |
|
frameRect = new Rect( |
|
e.StartPoint.X + (e.Delta.X < 0 ? e.Delta.X : 0), |
|
e.StartPoint.Y + (e.Delta.Y < 0 ? e.Delta.Y : 0), |
|
Math.Abs(e.Delta.X), |
|
Math.Abs(e.Delta.Y)); |
|
|
|
Canvas.SetLeft(frame, frameRect.X); |
|
Canvas.SetTop(frame, frameRect.Y); |
|
frame.Width = frameRect.Width; |
|
frame.Height = frameRect.Height; |
|
} |
|
|
|
public override void OnDragCompleted(AdvancedDragEventArgs e) |
|
{ |
|
DesignView.FeedbackLayer.Children.Remove(frame); |
|
if (!e.IsCancel) { |
|
var result = DesignView.HitTest(frameRect); |
|
Selection.Auto(result); |
|
} |
|
} |
|
} |
|
}
|
|
|