Browse Source

Merge branch 'master' of https://github.com/AvaloniaUI/Avalonia into popup-offset-properties

pull/547/head
Dan Walmsley 10 years ago
parent
commit
5c42995679
  1. 2
      src/Avalonia.Controls/LayoutTransformControl.cs
  2. 2
      src/Avalonia.Controls/Primitives/AdornerLayer.cs
  3. 6
      src/Avalonia.Input/InputExtensions.cs
  4. 4
      src/Avalonia.SceneGraph/Rect.cs
  5. 4
      src/Avalonia.SceneGraph/Rendering/RendererMixin.cs
  6. 12
      src/Avalonia.SceneGraph/Visual.cs
  7. 4
      src/Avalonia.SceneGraph/VisualTree/IVisual.cs
  8. 22
      src/Avalonia.SceneGraph/VisualTree/TransformedBounds.cs

2
src/Avalonia.Controls/LayoutTransformControl.cs

@ -139,7 +139,7 @@ namespace Avalonia.Controls
if (null != TransformRoot)
{
TransformRoot.RenderTransform = _matrixTransform;
TransformRoot.TransformOrigin = new RelativePoint(0, 0, RelativeUnit.Absolute);
TransformRoot.RenderTransformOrigin = new RelativePoint(0, 0, RelativeUnit.Absolute);
}
ApplyLayoutTransform();

2
src/Avalonia.Controls/Primitives/AdornerLayer.cs

@ -60,7 +60,7 @@ namespace Avalonia.Controls.Primitives
if (info != null)
{
child.RenderTransform = new MatrixTransform(info.Bounds.Transform);
child.TransformOrigin = new RelativePoint(new Point(0,0), RelativeUnit.Absolute);
child.RenderTransformOrigin = new RelativePoint(new Point(0,0), RelativeUnit.Absolute);
child.Arrange(info.Bounds.Bounds);
}
else

6
src/Avalonia.Input/InputExtensions.cs

@ -25,7 +25,6 @@ namespace Avalonia.Input
{
Contract.Requires<ArgumentNullException>(element != null);
var transformedBounds = BoundsTracker.GetTransformedBounds((Visual)element);
var geometry = transformedBounds.GetTransformedBoundsGeometry();
if (element.IsVisible &&
element.IsHitTestVisible &&
@ -42,7 +41,7 @@ namespace Avalonia.Input
}
}
if (geometry.FillContains(p))
if (transformedBounds.Contains(p))
{
yield return element;
}
@ -71,7 +70,6 @@ namespace Avalonia.Input
})
.OrderBy(x => x, null)
.Select(x => x.Element);
}
private class ZOrderElement : IComparable<ZOrderElement>
@ -95,4 +93,4 @@ namespace Avalonia.Input
}
}
}
}
}

4
src/Avalonia.SceneGraph/Rect.cs

@ -230,8 +230,8 @@ namespace Avalonia
/// <returns>true if the point is in the bounds of the rectangle; otherwise false.</returns>
public bool Contains(Point p)
{
return p.X >= _x && p.X < _x + _width &&
p.Y >= _y && p.Y < _y + _height;
return p.X >= _x && p.X <= _x + _width &&
p.Y >= _y && p.Y <= _y + _height;
}
/// <summary>

4
src/Avalonia.SceneGraph/Rendering/RendererMixin.cs

@ -104,7 +104,7 @@ namespace Avalonia.Rendering
if (visual.RenderTransform != null)
{
var origin = visual.TransformOrigin.ToPixels(new Size(visual.Bounds.Width, visual.Bounds.Height));
var origin = visual.RenderTransformOrigin.ToPixels(new Size(visual.Bounds.Width, visual.Bounds.Height));
var offset = Matrix.CreateTranslation(origin);
renderTransform = (-offset) * visual.RenderTransform.Value * (offset);
}
@ -171,7 +171,7 @@ namespace Avalonia.Rendering
}
else
{
var origin = visual.TransformOrigin.ToPixels(new Size(visual.Bounds.Width, visual.Bounds.Height));
var origin = visual.RenderTransformOrigin.ToPixels(new Size(visual.Bounds.Width, visual.Bounds.Height));
var offset = Matrix.CreateTranslation(visual.Bounds.Position + origin);
var m = (-offset) * visual.RenderTransform.Value * (offset);
return visual.Bounds.TransformToAABB(m);

12
src/Avalonia.SceneGraph/Visual.cs

@ -64,10 +64,10 @@ namespace Avalonia
AvaloniaProperty.Register<Visual, Transform>(nameof(RenderTransform));
/// <summary>
/// Defines the <see cref="TransformOrigin"/> property.
/// Defines the <see cref="RenderTransformOrigin"/> property.
/// </summary>
public static readonly StyledProperty<RelativePoint> TransformOriginProperty =
AvaloniaProperty.Register<Visual, RelativePoint>(nameof(TransformOrigin), defaultValue: RelativePoint.Center);
public static readonly StyledProperty<RelativePoint> RenderTransformOriginProperty =
AvaloniaProperty.Register<Visual, RelativePoint>(nameof(RenderTransformOrigin), defaultValue: RelativePoint.Center);
/// <summary>
/// Defines the <see cref="IVisual.VisualParent"/> property.
@ -180,10 +180,10 @@ namespace Avalonia
/// <summary>
/// Gets the transform origin of the scene graph node.
/// </summary>
public RelativePoint TransformOrigin
public RelativePoint RenderTransformOrigin
{
get { return GetValue(TransformOriginProperty); }
set { SetValue(TransformOriginProperty, value); }
get { return GetValue(RenderTransformOriginProperty); }
set { SetValue(RenderTransformOriginProperty, value); }
}
/// <summary>

4
src/Avalonia.SceneGraph/VisualTree/IVisual.cs

@ -72,9 +72,9 @@ namespace Avalonia.VisualTree
Transform RenderTransform { get; set; }
/// <summary>
/// Gets or sets the transform origin of the scene graph node.
/// Gets or sets the render transform origin of the scene graph node.
/// </summary>
RelativePoint TransformOrigin { get; set; }
RelativePoint RenderTransformOrigin { get; set; }
/// <summary>
/// Gets the scene graph node's child nodes.

22
src/Avalonia.SceneGraph/VisualTree/TransformedBounds.cs

@ -38,20 +38,18 @@ namespace Avalonia.VisualTree
/// </summary>
public Matrix Transform { get; }
public Geometry GetTransformedBoundsGeometry()
public bool Contains(Point point)
{
StreamGeometry geometry = new StreamGeometry();
using (var context = geometry.Open())
if (Transform.HasInverse)
{
context.SetFillRule(FillRule.EvenOdd);
context.BeginFigure(Bounds.TopLeft * Transform, true);
context.LineTo(Bounds.TopRight * Transform);
context.LineTo(Bounds.BottomRight * Transform);
context.LineTo(Bounds.BottomLeft * Transform);
context.LineTo(Bounds.TopLeft * Transform);
context.EndFigure(true);
Point trPoint = point * Transform.Invert();
return Bounds.Contains(trPoint);
}
else
{
return Bounds.Contains(point);
}
return geometry;
}
}
}
}
Loading…
Cancel
Save