From 516bc8b4e14b53dd72ffc2f453679865243e0192 Mon Sep 17 00:00:00 2001 From: Steven Kirk Date: Fri, 12 Jun 2020 10:32:06 +0200 Subject: [PATCH] Get effective viewport size from forthcoming arrange. Instead of using `ScrollContentPresenter.Viewport` which hasn't been updated yet. --- src/Avalonia.Controls/Presenters/ScrollContentPresenter.cs | 7 +++++-- src/Avalonia.Controls/Repeater/ViewportManager.cs | 5 +++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/Avalonia.Controls/Presenters/ScrollContentPresenter.cs b/src/Avalonia.Controls/Presenters/ScrollContentPresenter.cs index 1114f076d2..11604992f1 100644 --- a/src/Avalonia.Controls/Presenters/ScrollContentPresenter.cs +++ b/src/Avalonia.Controls/Presenters/ScrollContentPresenter.cs @@ -90,7 +90,7 @@ namespace Avalonia.Controls.Presenters this.GetObservable(ChildProperty).Subscribe(UpdateScrollableSubscription); } - internal event EventHandler PreArrange; + internal event EventHandler PreArrange; /// /// Gets or sets a value indicating whether the content can be scrolled horizontally. @@ -241,7 +241,10 @@ namespace Avalonia.Controls.Presenters /// protected override Size ArrangeOverride(Size finalSize) { - PreArrange?.Invoke(this, EventArgs.Empty); + PreArrange?.Invoke(this, new VectorEventArgs + { + Vector = new Vector(finalSize.Width, finalSize.Height), + }); if (_logicalScrollSubscription != null || Child == null) { diff --git a/src/Avalonia.Controls/Repeater/ViewportManager.cs b/src/Avalonia.Controls/Repeater/ViewportManager.cs index 57ac1cf2a5..bce7b4df5f 100644 --- a/src/Avalonia.Controls/Repeater/ViewportManager.cs +++ b/src/Avalonia.Controls/Repeater/ViewportManager.cs @@ -9,6 +9,7 @@ using System.Reactive.Disposables; using System.Reactive.Linq; using System.Threading.Tasks; using Avalonia.Controls.Presenters; +using Avalonia.Input; using Avalonia.Layout; using Avalonia.Logging; using Avalonia.Media; @@ -537,10 +538,10 @@ namespace Avalonia.Controls return Disposable.Empty; } - private void ScrollContentPresenterPreArrange(object sender, EventArgs e) + private void ScrollContentPresenterPreArrange(object sender, VectorEventArgs e) { var scp = (ScrollContentPresenter)sender; - var effectiveViewport = new Rect((Point)scp.Offset, scp.Viewport); + var effectiveViewport = new Rect((Point)scp.Offset, new Size(e.Vector.X, e.Vector.Y)); if (effectiveViewport != _visibleWindow) {