|
|
@ -145,6 +145,19 @@ namespace Avalonia.Controls |
|
|
// Return result to allocate enough space for the transformation
|
|
|
// Return result to allocate enough space for the transformation
|
|
|
return transformedDesiredSize; |
|
|
return transformedDesiredSize; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
protected override void OnAttachedToVisualTree(VisualTreeAttachmentEventArgs e) |
|
|
|
|
|
{ |
|
|
|
|
|
base.OnAttachedToVisualTree(e); |
|
|
|
|
|
SubscribeLayoutTransform(LayoutTransform as Transform); |
|
|
|
|
|
ApplyLayoutTransform(); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
protected override void OnDetachedFromVisualTree(VisualTreeAttachmentEventArgs e) |
|
|
|
|
|
{ |
|
|
|
|
|
base.OnDetachedFromVisualTree(e); |
|
|
|
|
|
UnsubscribeLayoutTransform(LayoutTransform as Transform); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
private IDisposable? _renderTransformChangedEvent; |
|
|
private IDisposable? _renderTransformChangedEvent; |
|
|
|
|
|
|
|
|
@ -224,7 +237,6 @@ namespace Avalonia.Controls |
|
|
/// Transformation matrix corresponding to _matrixTransform.
|
|
|
/// Transformation matrix corresponding to _matrixTransform.
|
|
|
/// </summary>
|
|
|
/// </summary>
|
|
|
private Matrix _transformation = Matrix.Identity; |
|
|
private Matrix _transformation = Matrix.Identity; |
|
|
private IDisposable? _transformChangedEvent; |
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
/// <summary>
|
|
|
/// Returns true if Size a is smaller than Size b in either dimension.
|
|
|
/// Returns true if Size a is smaller than Size b in either dimension.
|
|
|
@ -424,19 +436,34 @@ namespace Avalonia.Controls |
|
|
|
|
|
|
|
|
private void OnLayoutTransformChanged(AvaloniaPropertyChangedEventArgs e) |
|
|
private void OnLayoutTransformChanged(AvaloniaPropertyChangedEventArgs e) |
|
|
{ |
|
|
{ |
|
|
var newTransform = e.NewValue as Transform; |
|
|
if (this.IsAttachedToVisualTree) |
|
|
|
|
|
|
|
|
_transformChangedEvent?.Dispose(); |
|
|
|
|
|
_transformChangedEvent = null; |
|
|
|
|
|
|
|
|
|
|
|
if (newTransform != null) |
|
|
|
|
|
{ |
|
|
{ |
|
|
_transformChangedEvent = Observable.FromEventPattern( |
|
|
UnsubscribeLayoutTransform(e.OldValue as Transform); |
|
|
v => newTransform.Changed += v, v => newTransform.Changed -= v) |
|
|
SubscribeLayoutTransform(e.NewValue as Transform); |
|
|
.Subscribe(_ => ApplyLayoutTransform()); |
|
|
|
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
ApplyLayoutTransform(); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
private void OnTransformChanged(object? sender, EventArgs e) |
|
|
|
|
|
{ |
|
|
ApplyLayoutTransform(); |
|
|
ApplyLayoutTransform(); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
private void SubscribeLayoutTransform(Transform? transform) |
|
|
|
|
|
{ |
|
|
|
|
|
if (transform != null) |
|
|
|
|
|
{ |
|
|
|
|
|
transform.Changed += OnTransformChanged; |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
private void UnsubscribeLayoutTransform(Transform? transform) |
|
|
|
|
|
{ |
|
|
|
|
|
if (transform != null) |
|
|
|
|
|
{ |
|
|
|
|
|
transform.Changed -= OnTransformChanged; |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|