|
|
|
@ -9,33 +9,43 @@ namespace Avalonia.VisualTree |
|
|
|
/// Tracks the bounds of a control.
|
|
|
|
/// </summary>
|
|
|
|
/// <remarks>
|
|
|
|
/// This class is used by Adorners to track the control that the adorner is attached to.
|
|
|
|
/// This class is used to track a controls's bounds for hit testing.
|
|
|
|
/// TODO: This shouldn't be implemented as an attached property: it would be more performant
|
|
|
|
/// to just store bounds in some sort of central repository.
|
|
|
|
/// </remarks>
|
|
|
|
public class BoundsTracker |
|
|
|
{ |
|
|
|
private static AttachedProperty<TransformedBounds> TransformedBoundsProperty = |
|
|
|
AvaloniaProperty.RegisterAttached<BoundsTracker, Visual, TransformedBounds>("TransformedBounds"); |
|
|
|
/// <summary>
|
|
|
|
/// Defines the TransformedBounds attached property.
|
|
|
|
/// </summary>
|
|
|
|
private static AttachedProperty<TransformedBounds?> TransformedBoundsProperty = |
|
|
|
AvaloniaProperty.RegisterAttached<BoundsTracker, Visual, TransformedBounds?>("TransformedBounds"); |
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// Starts tracking the specified visual.
|
|
|
|
/// </summary>
|
|
|
|
/// <param name="visual">The visual.</param>
|
|
|
|
/// <returns>An observable that returns the tracked bounds.</returns>
|
|
|
|
public IObservable<TransformedBounds> Track(Visual visual) |
|
|
|
public IObservable<TransformedBounds?> Track(Visual visual) |
|
|
|
{ |
|
|
|
return visual.GetObservable(TransformedBoundsProperty); |
|
|
|
} |
|
|
|
|
|
|
|
internal static void SetTransformedBounds(Visual visual, TransformedBounds bounds) |
|
|
|
/// <summary>
|
|
|
|
/// Sets the transformed bounds of the visual.
|
|
|
|
/// </summary>
|
|
|
|
/// <param name="visual">The visual.</param>
|
|
|
|
/// <param name="value">The transformed bounds.</param>
|
|
|
|
internal static void SetTransformedBounds(Visual visual, TransformedBounds? value) |
|
|
|
{ |
|
|
|
visual.SetValue(TransformedBoundsProperty, bounds); |
|
|
|
visual.SetValue(TransformedBoundsProperty, value); |
|
|
|
} |
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// Gets the transformed bounds of the visual.
|
|
|
|
/// </summary>
|
|
|
|
/// <param name="visual">The visual.</param>
|
|
|
|
/// <returns>The transformed bounds.</returns>
|
|
|
|
public static TransformedBounds GetTransformedBounds(Visual visual) => visual.GetValue(TransformedBoundsProperty); |
|
|
|
/// <returns>The transformed bounds or null if the visual is not visible.</returns>
|
|
|
|
public static TransformedBounds? GetTransformedBounds(Visual visual) => visual.GetValue(TransformedBoundsProperty); |
|
|
|
} |
|
|
|
} |
|
|
|
|