Browse Source

bugfix #675

pull/676/head
jkuehner 10 years ago
parent
commit
a7b0224a56
  1. 30
      src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Controls/AdornerLayer.cs

30
src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Controls/AdornerLayer.cs

@ -21,10 +21,12 @@ @@ -21,10 +21,12 @@
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Reflection;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;
using System.Windows.Media.Media3D;
using ICSharpCode.WpfDesign.Adorners;
namespace ICSharpCode.WpfDesign.Designer.Controls
@ -122,7 +124,7 @@ namespace ICSharpCode.WpfDesign.Designer.Controls @@ -122,7 +124,7 @@ namespace ICSharpCode.WpfDesign.Designer.Controls
UpdateAllAdorners(false);
#if DEBUG_ADORNERLAYER
Debug.WriteLine("Adorner LayoutUpdated. AdornedElements=" + _dict.Count +
", visible adorners=" + VisualChildrenCount + ", total adorners=" + (_totalAdornerCount));
", visible adorners=" + VisualChildrenCount + ", total adorners=" + (_totalAdornerCount));
#endif
}
@ -193,7 +195,7 @@ namespace ICSharpCode.WpfDesign.Designer.Controls @@ -193,7 +195,7 @@ namespace ICSharpCode.WpfDesign.Designer.Controls
#if DEBUG_ADORNERLAYER
Debug.WriteLine("Adorner added. AdornedElements=" + _dict.Count +
", visible adorners=" + VisualChildrenCount + ", total adorners=" + (++_totalAdornerCount));
", visible adorners=" + VisualChildrenCount + ", total adorners=" + (++_totalAdornerCount));
#endif
}
@ -224,8 +226,9 @@ namespace ICSharpCode.WpfDesign.Designer.Controls @@ -224,8 +226,9 @@ namespace ICSharpCode.WpfDesign.Designer.Controls
foreach (AdornerPanel adorner in this.Children) {
if (adorner.AdornedElement.IsDescendantOf(_designPanel))
{
var rt = (MatrixTransform) adorner.AdornedElement.TransformToAncestor(_designPanel);
if (adorner.AdornedDesignItem != null && adorner.AdornedDesignItem.Parent != null && adorner.AdornedDesignItem.Parent.View is Canvas && adorner.AdornedElement.RenderSize.Height == 0 && adorner.AdornedElement.RenderSize.Width == 0)
var transform = adorner.AdornedElement.TransformToAncestor(_designPanel);
var rt = transform as MatrixTransform;
if (rt != null && adorner.AdornedDesignItem != null && adorner.AdornedDesignItem.Parent != null && adorner.AdornedDesignItem.Parent.View is Canvas && adorner.AdornedElement.RenderSize.Height == 0 && adorner.AdornedElement.RenderSize.Width == 0)
{
var width = ((FrameworkElement) adorner.AdornedElement).Width;
width = width > 0 ? width : 2.0;
@ -235,6 +238,16 @@ namespace ICSharpCode.WpfDesign.Designer.Controls @@ -235,6 +238,16 @@ namespace ICSharpCode.WpfDesign.Designer.Controls
var yOffset = rt.Matrix.OffsetY - (height / 2);
rt = new MatrixTransform(new Matrix(rt.Matrix.M11, rt.Matrix.M12, rt.Matrix.M21, rt.Matrix.M22, xOffset, yOffset));
}
else if (transform is GeneralTransformGroup)
{
//var intTrans = ((GeneralTransformGroup) transform).Children.FirstOrDefault(x => x.GetType().Name == "GeneralTransform2DTo3DTo2D");
//var prp = intTrans.GetType().GetField("_worldTransformation", BindingFlags.Instance | BindingFlags.NonPublic);
//var mtx = (Matrix3D) prp.GetValue(intTrans);
//var mtx2D = new Matrix(mtx.M11, mtx.M12, mtx.M21, mtx.M22, mtx.OffsetX, mtx.OffsetY);
//rt = new MatrixTransform(mtx2D);
rt = ((GeneralTransformGroup)transform).Children.OfType<MatrixTransform>().LastOrDefault();
}
adorner.RenderTransform = rt;
}
@ -264,7 +277,7 @@ namespace ICSharpCode.WpfDesign.Designer.Controls @@ -264,7 +277,7 @@ namespace ICSharpCode.WpfDesign.Designer.Controls
#if DEBUG_ADORNERLAYER
Debug.WriteLine("Adorner removed. AdornedElements=" + _dict.Count +
", visible adorners=" + VisualChildrenCount + ", total adorners=" + (--_totalAdornerCount));
", visible adorners=" + VisualChildrenCount + ", total adorners=" + (--_totalAdornerCount));
#endif
return true;
@ -283,8 +296,9 @@ namespace ICSharpCode.WpfDesign.Designer.Controls @@ -283,8 +296,9 @@ namespace ICSharpCode.WpfDesign.Designer.Controls
Rect GetPositionCache(UIElement element)
{
Transform t = (Transform)element.TransformToAncestor(_designPanel);
return new Rect(new Point(t.Value.OffsetX, t.Value.OffsetY), element.RenderSize);
var t = element.TransformToAncestor(_designPanel);
var p = t.Transform(new Point(0, 0));
return new Rect(p, element.RenderSize);
}
void UpdateAdornersForElement(UIElement element, AdornerInfo info, bool forceInvalidate)

Loading…
Cancel
Save