5 changed files with 140 additions and 0 deletions
@ -0,0 +1,28 @@
@@ -0,0 +1,28 @@
|
||||
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
|
||||
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
|
||||
|
||||
using System; |
||||
using System.Collections.Generic; |
||||
using System.Diagnostics; |
||||
using System.Windows; |
||||
using System.Windows.Input; |
||||
using System.Windows.Controls; |
||||
using System.Windows.Controls.Primitives; |
||||
using ICSharpCode.WpfDesign.Adorners; |
||||
using ICSharpCode.WpfDesign.Extensions; |
||||
|
||||
namespace ICSharpCode.WpfDesign.Designer.Controls |
||||
{ |
||||
/// <summary>
|
||||
/// Description of RenderTransformThumb.
|
||||
/// </summary>
|
||||
public class RenderTransformOriginThumb : Thumb |
||||
{ |
||||
static RenderTransformOriginThumb() |
||||
{ |
||||
//This OverrideMetadata call tells the system that this element wants to provide a style that is different than its base class.
|
||||
//This style is defined in themes\generic.xaml
|
||||
DefaultStyleKeyProperty.OverrideMetadata(typeof(RenderTransformOriginThumb), new FrameworkPropertyMetadata(typeof(RenderTransformOriginThumb))); |
||||
} |
||||
} |
||||
} |
@ -0,0 +1,88 @@
@@ -0,0 +1,88 @@
|
||||
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
|
||||
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
|
||||
|
||||
using System; |
||||
using System.Collections.Generic; |
||||
using System.Linq; |
||||
using System.Text; |
||||
using ICSharpCode.WpfDesign.Adorners; |
||||
using ICSharpCode.WpfDesign.Extensions; |
||||
using System.Windows.Controls; |
||||
using System.Windows.Controls.Primitives; |
||||
using System.Windows; |
||||
using System.Windows.Input; |
||||
using ICSharpCode.WpfDesign.Designer.Controls; |
||||
using System.Windows.Media; |
||||
|
||||
namespace ICSharpCode.WpfDesign.Designer.Extensions |
||||
{ |
||||
[ExtensionFor(typeof(FrameworkElement))] |
||||
public class RenderTransformOriginExtension : SelectionAdornerProvider |
||||
{ |
||||
readonly AdornerPanel adornerPanel; |
||||
RenderTransformOriginThumb renderTransformOriginThumb; |
||||
/// <summary>An array containing this.ExtendedItem as only element</summary>
|
||||
readonly DesignItem[] extendedItemArray = new DesignItem[1]; |
||||
IPlacementBehavior resizeBehavior; |
||||
PlacementOperation operation; |
||||
ChangeGroup changeGroup; |
||||
|
||||
public RenderTransformOriginExtension() |
||||
{ |
||||
adornerPanel = new AdornerPanel(); |
||||
adornerPanel.Order = AdornerOrder.Foreground; |
||||
this.Adorners.Add(adornerPanel); |
||||
|
||||
CreateRenderTransformOriginThumb(); |
||||
} |
||||
|
||||
void CreateRenderTransformOriginThumb() |
||||
{ |
||||
renderTransformOriginThumb = new RenderTransformOriginThumb(); |
||||
renderTransformOriginThumb.Cursor = Cursors.Hand; |
||||
|
||||
AdornerPanel.SetPlacement(renderTransformOriginThumb, |
||||
new RelativePlacement(HorizontalAlignment.Left, VerticalAlignment.Top){XRelativeToContentWidth = renderTransformOrigin.X, YRelativeToContentHeight = renderTransformOrigin.Y}); |
||||
adornerPanel.Children.Add(renderTransformOriginThumb); |
||||
|
||||
renderTransformOriginThumb.DragDelta += new DragDeltaEventHandler(renderTransformOriginThumb_DragDelta); |
||||
} |
||||
|
||||
void renderTransformOriginThumb_DragDelta(object sender, DragDeltaEventArgs e) |
||||
{ |
||||
var p = AdornerPanel.GetPlacement(renderTransformOriginThumb) as RelativePlacement; |
||||
var pointAbs = adornerPanel.RelativeToAbsolute(new Vector(p.XRelativeToContentWidth, p.YRelativeToContentHeight)); |
||||
var pointAbsNew = pointAbs + new Vector(e.HorizontalChange, e.VerticalChange); |
||||
var pRel = adornerPanel.AbsoluteToRelative(pointAbsNew); |
||||
|
||||
AdornerPanel.SetPlacement(renderTransformOriginThumb, |
||||
new RelativePlacement(HorizontalAlignment.Left, VerticalAlignment.Top){ XRelativeToContentWidth = pRel.X, YRelativeToContentHeight = pRel.Y }); |
||||
|
||||
this.ExtendedItem.Properties.GetProperty(FrameworkElement.RenderTransformOriginProperty).SetValue(new Point(pRel.X,pRel.Y)); |
||||
} |
||||
|
||||
Point renderTransformOrigin = new Point(0.5, 0.5); |
||||
|
||||
protected override void OnInitialized() |
||||
{ |
||||
base.OnInitialized(); |
||||
extendedItemArray[0] = this.ExtendedItem; |
||||
this.ExtendedItem.PropertyChanged += OnPropertyChanged; |
||||
|
||||
if (this.ExtendedItem.Properties.GetProperty(FrameworkElement.RenderTransformOriginProperty).IsSet) { |
||||
renderTransformOrigin = (Point)this.ExtendedItem.Properties.GetProperty(FrameworkElement.RenderTransformOriginProperty).ValueOnInstance; |
||||
} |
||||
|
||||
AdornerPanel.SetPlacement(renderTransformOriginThumb, |
||||
new RelativePlacement(HorizontalAlignment.Left, VerticalAlignment.Top){XRelativeToContentWidth = renderTransformOrigin.X, YRelativeToContentHeight = renderTransformOrigin.Y}); |
||||
} |
||||
|
||||
void OnPropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e) |
||||
{ } |
||||
|
||||
protected override void OnRemove() |
||||
{ |
||||
base.OnRemove(); |
||||
} |
||||
} |
||||
} |
Loading…
Reference in new issue