Grid snaps for ZoomControl, not critical Theme corrections, new demo set

This commit is contained in:
2019-06-22 00:42:22 +03:00
parent 70aada3d59
commit 5da5856308
11 changed files with 395 additions and 75 deletions

View File

@@ -11,44 +11,61 @@ namespace BrightSharp.Diagrams
public class MoveThumb : Thumb
{
private RotateTransform rotateTransform;
private ContentControl designerItem;
private FrameworkElement designerItem;
private static int? zIndex = null;
public MoveThumb() {
public MoveThumb()
{
DragStarted += MoveThumb_DragStarted;
DragDelta += MoveThumb_DragDelta;
DragCompleted += MoveThumb_DragCompleted;
}
private void MoveThumb_DragCompleted(object sender, DragCompletedEventArgs e) {
private void MoveThumb_DragCompleted(object sender, DragCompletedEventArgs e)
{
//TODO Need think about ZIndex changes
}
private void MoveThumb_DragStarted(object sender, DragStartedEventArgs e) {
designerItem = DataContext as ContentControl;
private void MoveThumb_DragStarted(object sender, DragStartedEventArgs e)
{
designerItem = DataContext as FrameworkElement;
if (designerItem != null) {
if (designerItem != null)
{
rotateTransform = designerItem.RenderTransform as RotateTransform;
if (designerItem.GetBindingExpression(Panel.ZIndexProperty) == null) {
if (designerItem.GetBindingExpression(Panel.ZIndexProperty) == null)
{
zIndex = Math.Max(zIndex ?? 0, Panel.GetZIndex(designerItem));
Panel.SetZIndex(designerItem, zIndex.Value + 1);
}
}
}
private void MoveThumb_DragDelta(object sender, DragDeltaEventArgs e) {
if (designerItem != null) {
private void MoveThumb_DragDelta(object sender, DragDeltaEventArgs e)
{
if (designerItem != null)
{
Point dragDelta = new Point(e.HorizontalChange, e.VerticalChange);
if (rotateTransform != null) {
var zoomControl = designerItem.Parent as dynamic;
double.TryParse(zoomControl.Tag as string, out var gridSize);
if (rotateTransform != null)
{
dragDelta = rotateTransform.Transform(dragDelta);
}
if (double.IsNaN(Canvas.GetLeft(designerItem))) Canvas.SetLeft(designerItem, 0);
if (double.IsNaN(Canvas.GetTop(designerItem))) Canvas.SetTop(designerItem, 0);
Canvas.SetLeft(designerItem, Canvas.GetLeft(designerItem) + dragDelta.X);
Canvas.SetTop(designerItem, Canvas.GetTop(designerItem) + dragDelta.Y);
var newLeft = Canvas.GetLeft(designerItem) + dragDelta.X;
var newTop = Canvas.GetTop(designerItem) + dragDelta.Y;
if (gridSize > 0)
{
newLeft = Math.Truncate(newLeft / gridSize) * gridSize;
newTop = Math.Truncate(newTop / gridSize) * gridSize;
}
Canvas.SetLeft(designerItem, newLeft);
Canvas.SetTop(designerItem, newTop);
}
}