5 changed files with 140 additions and 0 deletions
@ -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 @@ |
|||||||
|
// 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