Skip to content

Commit 5483217

Browse files
authored
Merge IResourceHost2 into IResourceHost (#20576)
* Merge IResourceHost2 into IResourceHost * Update API suppressions
1 parent 806193a commit 5483217

File tree

17 files changed

+109
-165
lines changed

17 files changed

+109
-165
lines changed

api/Avalonia.nupkg.xml

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,12 @@
9797
<Left>baseline/Avalonia/lib/netstandard2.0/Avalonia.Base.dll</Left>
9898
<Right>current/Avalonia/lib/netstandard2.0/Avalonia.Base.dll</Right>
9999
</Suppression>
100+
<Suppression>
101+
<DiagnosticId>CP0002</DiagnosticId>
102+
<Target>F:Avalonia.Controls.ResourcesChangedEventArgs.Empty</Target>
103+
<Left>baseline/Avalonia/lib/net10.0/Avalonia.Base.dll</Left>
104+
<Right>current/Avalonia/lib/net10.0/Avalonia.Base.dll</Right>
105+
</Suppression>
100106
<Suppression>
101107
<DiagnosticId>CP0002</DiagnosticId>
102108
<Target>F:Avalonia.Media.DrawingImage.ViewboxProperty</Target>
@@ -109,6 +115,12 @@
109115
<Left>baseline/Avalonia/lib/net10.0/Avalonia.Base.dll</Left>
110116
<Right>current/Avalonia/lib/net10.0/Avalonia.Base.dll</Right>
111117
</Suppression>
118+
<Suppression>
119+
<DiagnosticId>CP0002</DiagnosticId>
120+
<Target>M:Avalonia.Controls.ResourcesChangedEventArgs.#ctor</Target>
121+
<Left>baseline/Avalonia/lib/net10.0/Avalonia.Base.dll</Left>
122+
<Right>current/Avalonia/lib/net10.0/Avalonia.Base.dll</Right>
123+
</Suppression>
112124
<Suppression>
113125
<DiagnosticId>CP0002</DiagnosticId>
114126
<Target>M:Avalonia.Input.IKeyboardNavigationHandler.Move(Avalonia.Input.IInputElement,Avalonia.Input.NavigationDirection,Avalonia.Input.KeyModifiers)</Target>
@@ -487,6 +499,12 @@
487499
<Left>baseline/Avalonia/lib/net6.0/Avalonia.Dialogs.dll</Left>
488500
<Right>current/Avalonia/lib/net6.0/Avalonia.Dialogs.dll</Right>
489501
</Suppression>
502+
<Suppression>
503+
<DiagnosticId>CP0002</DiagnosticId>
504+
<Target>F:Avalonia.Controls.ResourcesChangedEventArgs.Empty</Target>
505+
<Left>baseline/Avalonia/lib/net8.0/Avalonia.Base.dll</Left>
506+
<Right>current/Avalonia/lib/net8.0/Avalonia.Base.dll</Right>
507+
</Suppression>
490508
<Suppression>
491509
<DiagnosticId>CP0002</DiagnosticId>
492510
<Target>F:Avalonia.Media.DrawingImage.ViewboxProperty</Target>
@@ -499,6 +517,12 @@
499517
<Left>baseline/Avalonia/lib/net8.0/Avalonia.Base.dll</Left>
500518
<Right>current/Avalonia/lib/net8.0/Avalonia.Base.dll</Right>
501519
</Suppression>
520+
<Suppression>
521+
<DiagnosticId>CP0002</DiagnosticId>
522+
<Target>M:Avalonia.Controls.ResourcesChangedEventArgs.#ctor</Target>
523+
<Left>baseline/Avalonia/lib/net8.0/Avalonia.Base.dll</Left>
524+
<Right>current/Avalonia/lib/net8.0/Avalonia.Base.dll</Right>
525+
</Suppression>
502526
<Suppression>
503527
<DiagnosticId>CP0002</DiagnosticId>
504528
<Target>M:Avalonia.Input.IKeyboardNavigationHandler.Move(Avalonia.Input.IInputElement,Avalonia.Input.NavigationDirection,Avalonia.Input.KeyModifiers)</Target>
@@ -1201,6 +1225,18 @@
12011225
<Left>baseline/Avalonia/lib/netstandard2.0/Avalonia.OpenGL.dll</Left>
12021226
<Right>current/Avalonia/lib/netstandard2.0/Avalonia.OpenGL.dll</Right>
12031227
</Suppression>
1228+
<Suppression>
1229+
<DiagnosticId>CP0007</DiagnosticId>
1230+
<Target>T:Avalonia.Controls.ResourcesChangedEventArgs</Target>
1231+
<Left>baseline/Avalonia/lib/net10.0/Avalonia.Base.dll</Left>
1232+
<Right>current/Avalonia/lib/net10.0/Avalonia.Base.dll</Right>
1233+
</Suppression>
1234+
<Suppression>
1235+
<DiagnosticId>CP0007</DiagnosticId>
1236+
<Target>T:Avalonia.Controls.ResourcesChangedEventArgs</Target>
1237+
<Left>baseline/Avalonia/lib/net8.0/Avalonia.Base.dll</Left>
1238+
<Right>current/Avalonia/lib/net8.0/Avalonia.Base.dll</Right>
1239+
</Suppression>
12041240
<Suppression>
12051241
<DiagnosticId>CP0008</DiagnosticId>
12061242
<Target>T:Avalonia.Media.StreamGeometryContext</Target>
@@ -1225,12 +1261,24 @@
12251261
<Left>baseline/Avalonia/lib/net8.0/Avalonia.Base.dll</Left>
12261262
<Right>current/Avalonia/lib/net8.0/Avalonia.Base.dll</Right>
12271263
</Suppression>
1264+
<Suppression>
1265+
<DiagnosticId>CP0009</DiagnosticId>
1266+
<Target>T:Avalonia.Controls.ResourcesChangedEventArgs</Target>
1267+
<Left>baseline/Avalonia/lib/net10.0/Avalonia.Base.dll</Left>
1268+
<Right>current/Avalonia/lib/net10.0/Avalonia.Base.dll</Right>
1269+
</Suppression>
12281270
<Suppression>
12291271
<DiagnosticId>CP0009</DiagnosticId>
12301272
<Target>T:Avalonia.Platform.Screen</Target>
12311273
<Left>baseline/Avalonia/lib/net10.0/Avalonia.Controls.dll</Left>
12321274
<Right>current/Avalonia/lib/net10.0/Avalonia.Controls.dll</Right>
12331275
</Suppression>
1276+
<Suppression>
1277+
<DiagnosticId>CP0009</DiagnosticId>
1278+
<Target>T:Avalonia.Controls.ResourcesChangedEventArgs</Target>
1279+
<Left>baseline/Avalonia/lib/net8.0/Avalonia.Base.dll</Left>
1280+
<Right>current/Avalonia/lib/net8.0/Avalonia.Base.dll</Right>
1281+
</Suppression>
12341282
<Suppression>
12351283
<DiagnosticId>CP0009</DiagnosticId>
12361284
<Target>T:Avalonia.Platform.Screen</Target>

src/Avalonia.Base/Controls/IResourceHost.cs

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -29,12 +29,4 @@ public interface IResourceHost : IResourceNode
2929
/// </remarks>
3030
void NotifyHostedResourcesChanged(ResourcesChangedEventArgs e);
3131
}
32-
33-
// TODO12: merge with IResourceHost
34-
internal interface IResourceHost2 : IResourceHost
35-
{
36-
event EventHandler<ResourcesChangedToken> ResourcesChanged2;
37-
38-
void NotifyHostedResourcesChanged(ResourcesChangedToken token);
39-
}
4032
}

src/Avalonia.Base/Controls/ResourceDictionary.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -358,7 +358,7 @@ protected sealed override void OnAddOwner(IResourceHost owner)
358358

359359
if (hasResources)
360360
{
361-
owner.NotifyHostedResourcesChanged(ResourcesChangedToken.Create());
361+
owner.NotifyHostedResourcesChanged(ResourcesChangedEventArgs.Create());
362362
}
363363
}
364364

@@ -385,7 +385,7 @@ protected sealed override void OnRemoveOwner(IResourceHost owner)
385385

386386
if (hasResources)
387387
{
388-
owner.NotifyHostedResourcesChanged(ResourcesChangedToken.Create());
388+
owner.NotifyHostedResourcesChanged(ResourcesChangedEventArgs.Create());
389389
}
390390
}
391391

src/Avalonia.Base/Controls/ResourceNodeExtensions.cs

Lines changed: 6 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -158,7 +158,7 @@ public ResourceObservable(
158158

159159
protected override void Initialize()
160160
{
161-
_target.SubscribeToResourcesChanged(ResourcesChanged, ResourcesChanged2);
161+
_target.ResourcesChanged += ResourcesChanged;
162162

163163
if (_target is IThemeVariantHost themeVariantHost)
164164
{
@@ -168,7 +168,7 @@ protected override void Initialize()
168168

169169
protected override void Deinitialize()
170170
{
171-
_target.UnsubscribeFromResourcesChanged(ResourcesChanged, ResourcesChanged2);
171+
_target.ResourcesChanged -= ResourcesChanged;
172172

173173
if (_target is IThemeVariantHost themeVariantHost)
174174
{
@@ -186,11 +186,6 @@ private void ResourcesChanged(object? sender, ResourcesChangedEventArgs e)
186186
PublishNext(GetValue());
187187
}
188188

189-
private void ResourcesChanged2(object? sender, ResourcesChangedToken token)
190-
{
191-
PublishNext(GetValue());
192-
}
193-
194189
private void ActualThemeVariantChanged(object? sender, EventArgs e)
195190
{
196191
PublishNext(GetValue());
@@ -230,7 +225,7 @@ protected override void Initialize()
230225
_target.OwnerChanged += OwnerChanged;
231226
_owner = _target.Owner;
232227

233-
_owner?.SubscribeToResourcesChanged(ResourcesChanged, ResourcesChanged2);
228+
_owner?.ResourcesChanged += ResourcesChanged;
234229

235230
if (_overrideThemeVariant is null && _owner is IThemeVariantHost themeVariantHost)
236231
{
@@ -242,7 +237,7 @@ protected override void Deinitialize()
242237
{
243238
_target.OwnerChanged -= OwnerChanged;
244239

245-
_owner?.UnsubscribeFromResourcesChanged(ResourcesChanged, ResourcesChanged2);
240+
_owner?.ResourcesChanged -= ResourcesChanged;
246241

247242
if (_overrideThemeVariant is null && _owner is IThemeVariantHost themeVariantHost)
248243
{
@@ -270,7 +265,7 @@ private void PublishNext()
270265

271266
private void OwnerChanged(object? sender, EventArgs e)
272267
{
273-
_owner?.UnsubscribeFromResourcesChanged(ResourcesChanged, ResourcesChanged2);
268+
_owner?.ResourcesChanged -= ResourcesChanged;
274269

275270
if (_overrideThemeVariant is null && _owner is IThemeVariantHost themeVariantHost)
276271
{
@@ -279,7 +274,7 @@ private void OwnerChanged(object? sender, EventArgs e)
279274

280275
_owner = _target.Owner;
281276

282-
_owner?.SubscribeToResourcesChanged(ResourcesChanged, ResourcesChanged2);
277+
_owner?.ResourcesChanged += ResourcesChanged;
283278

284279
if (_overrideThemeVariant is null && _owner is IThemeVariantHost themeVariantHost2)
285280
{
@@ -299,11 +294,6 @@ private void ResourcesChanged(object? sender, ResourcesChangedEventArgs e)
299294
PublishNext();
300295
}
301296

302-
private void ResourcesChanged2(object? sender, ResourcesChangedToken token)
303-
{
304-
PublishNext();
305-
}
306-
307297
private object? GetValue()
308298
{
309299
var theme = _overrideThemeVariant ?? (_target.Owner as IThemeVariantHost)?.ActualThemeVariant;

src/Avalonia.Base/Controls/ResourceProvider.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ private set
4545

4646
protected void RaiseResourcesChanged()
4747
{
48-
Owner?.NotifyHostedResourcesChanged(ResourcesChangedToken.Create());
48+
Owner?.NotifyHostedResourcesChanged(ResourcesChangedEventArgs.Create());
4949
}
5050

5151
/// <summary>
@@ -57,7 +57,7 @@ protected virtual void OnAddOwner(IResourceHost owner)
5757
{
5858
if (HasResources)
5959
{
60-
owner.NotifyHostedResourcesChanged(ResourcesChangedToken.Create());
60+
owner.NotifyHostedResourcesChanged(ResourcesChangedEventArgs.Create());
6161
}
6262
}
6363

@@ -70,7 +70,7 @@ protected virtual void OnRemoveOwner(IResourceHost owner)
7070
{
7171
if (HasResources)
7272
{
73-
owner.NotifyHostedResourcesChanged(ResourcesChangedToken.Create());
73+
owner.NotifyHostedResourcesChanged(ResourcesChangedEventArgs.Create());
7474
}
7575
}
7676

Lines changed: 21 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,24 @@
1-
using System;
1+
using System.Threading;
22

3-
namespace Avalonia.Controls
3+
namespace Avalonia.Controls;
4+
5+
/// <summary>
6+
/// Represents the event arguments of <see cref="IResourceHost.ResourcesChanged"/>.
7+
/// The <see cref="SequenceNumber"/> identifies the changes.
8+
/// </summary>
9+
/// <param name="SequenceNumber">The sequence number used to identify the changes.</param>
10+
/// <remarks>
11+
/// For performance reasons, this type is a struct.
12+
/// Avoid using a default instance of this type or its default constructor, call <see cref="Create"/> instead.
13+
/// </remarks>
14+
public readonly record struct ResourcesChangedEventArgs(int SequenceNumber)
415
{
5-
// TODO12: change this to be a struct, remove ResourcesChangedToken
6-
public class ResourcesChangedEventArgs : EventArgs
7-
{
8-
public static new readonly ResourcesChangedEventArgs Empty = new ResourcesChangedEventArgs();
9-
}
16+
private static int s_lastSequenceNumber;
17+
18+
/// <summary>
19+
/// Creates a new instance of <see cref="ResourcesChangedEventArgs"/> with an auto-incremented sequence number.
20+
/// </summary>
21+
/// <returns></returns>
22+
public static ResourcesChangedEventArgs Create()
23+
=> new(Interlocked.Increment(ref s_lastSequenceNumber));
1024
}

src/Avalonia.Base/Controls/ResourcesChangedHelper.cs

Lines changed: 0 additions & 45 deletions
This file was deleted.

src/Avalonia.Base/Controls/ResourcesChangedToken.cs

Lines changed: 0 additions & 11 deletions
This file was deleted.

0 commit comments

Comments
 (0)