diff --git a/api/Avalonia.Skia.nupkg.xml b/api/Avalonia.Skia.nupkg.xml index 7abbc47cea..ed29e880a4 100644 --- a/api/Avalonia.Skia.nupkg.xml +++ b/api/Avalonia.Skia.nupkg.xml @@ -1,4 +1,4 @@ - + @@ -7,4 +7,4 @@ baseline/netstandard2.0/Avalonia.Skia.dll target/netstandard2.0/Avalonia.Skia.dll - + \ No newline at end of file diff --git a/api/Avalonia.nupkg.xml b/api/Avalonia.nupkg.xml index 13b9724778..f9306abc56 100644 --- a/api/Avalonia.nupkg.xml +++ b/api/Avalonia.nupkg.xml @@ -2,14 +2,20 @@ - CP0001 - T:Avalonia.Diagnostics.AppliedStyle + CP0002 + M:Avalonia.Diagnostics.AppliedStyle.get_HasActivator baseline/netstandard2.0/Avalonia.Base.dll target/netstandard2.0/Avalonia.Base.dll - CP0001 - T:Avalonia.Diagnostics.StyleDiagnostics + CP0002 + M:Avalonia.Diagnostics.AppliedStyle.get_IsActive + baseline/netstandard2.0/Avalonia.Base.dll + target/netstandard2.0/Avalonia.Base.dll + + + CP0002 + M:Avalonia.Diagnostics.AppliedStyle.get_Style baseline/netstandard2.0/Avalonia.Base.dll target/netstandard2.0/Avalonia.Base.dll @@ -19,6 +25,18 @@ baseline/netstandard2.0/Avalonia.Base.dll target/netstandard2.0/Avalonia.Base.dll + + CP0002 + M:Avalonia.Diagnostics.StyleDiagnostics.#ctor(System.Collections.Generic.IReadOnlyList{Avalonia.Diagnostics.AppliedStyle}) + baseline/netstandard2.0/Avalonia.Base.dll + target/netstandard2.0/Avalonia.Base.dll + + + CP0002 + M:Avalonia.Diagnostics.StyleDiagnostics.get_AppliedStyles + baseline/netstandard2.0/Avalonia.Base.dll + target/netstandard2.0/Avalonia.Base.dll + CP0002 M:Avalonia.Controls.Primitives.IPopupHost.ConfigurePosition(Avalonia.Visual,Avalonia.Controls.PlacementMode,Avalonia.Point,Avalonia.Controls.Primitives.PopupPositioning.PopupAnchor,Avalonia.Controls.Primitives.PopupPositioning.PopupGravity,Avalonia.Controls.Primitives.PopupPositioning.PopupPositionerConstraintAdjustment,System.Nullable{Avalonia.Rect}) @@ -55,6 +73,12 @@ baseline/netstandard2.0/Avalonia.Controls.dll target/netstandard2.0/Avalonia.Controls.dll + + CP0009 + T:Avalonia.Diagnostics.StyleDiagnostics + baseline/netstandard2.0/Avalonia.Base.dll + target/netstandard2.0/Avalonia.Base.dll + CP0009 T:Avalonia.Controls.Screens diff --git a/src/Avalonia.Base/Diagnostics/IValueFrameDiagnostic.cs b/src/Avalonia.Base/Diagnostics/IValueFrameDiagnostic.cs index df48efe04e..1c1ff4fd2f 100644 --- a/src/Avalonia.Base/Diagnostics/IValueFrameDiagnostic.cs +++ b/src/Avalonia.Base/Diagnostics/IValueFrameDiagnostic.cs @@ -4,9 +4,10 @@ using Avalonia.Metadata; namespace Avalonia.Diagnostics; +[PrivateApi] public record ValueEntryDiagnostic(AvaloniaProperty Property, object? Value); -[Unstable] +[PrivateApi] [NotClientImplementable] public interface IValueFrameDiagnostic { diff --git a/src/Avalonia.Base/Diagnostics/StyleDiagnostics.cs b/src/Avalonia.Base/Diagnostics/StyleDiagnostics.cs new file mode 100644 index 0000000000..3db48cd69c --- /dev/null +++ b/src/Avalonia.Base/Diagnostics/StyleDiagnostics.cs @@ -0,0 +1,37 @@ +using System; +using System.Collections.Generic; +using Avalonia.Metadata; +using Avalonia.Styling; + +namespace Avalonia.Diagnostics; + +[PrivateApi] +[Unstable("Use StyledElementExtensions.GetValueStoreDiagnostic() instead")] +public class StyleDiagnostics +{ + /// + /// Currently applied styles. + /// + public IReadOnlyList AppliedStyles { get; } + + public StyleDiagnostics(IReadOnlyList appliedStyles) + { + AppliedStyles = appliedStyles; + } +} + +[PrivateApi] +[Unstable("Use StyledElementExtensions.GetValueStoreDiagnostic() instead")] +public sealed class AppliedStyle +{ + private readonly StyleInstance _instance; + + internal AppliedStyle(StyleInstance instance) + { + _instance = instance; + } + + public bool HasActivator => _instance.HasActivator; + public bool IsActive => _instance.IsActive(); + public StyleBase Style => (StyleBase)_instance.Source; +} diff --git a/src/Avalonia.Base/Diagnostics/StyleValueFrameDiagnostic.cs b/src/Avalonia.Base/Diagnostics/StyleValueFrameDiagnostic.cs index 03d901cee2..871ea7dfc0 100644 --- a/src/Avalonia.Base/Diagnostics/StyleValueFrameDiagnostic.cs +++ b/src/Avalonia.Base/Diagnostics/StyleValueFrameDiagnostic.cs @@ -1,5 +1,6 @@ using System.Collections.Generic; using Avalonia.Data; +using Avalonia.Metadata; using Avalonia.PropertyStore; using Avalonia.Styling; @@ -60,4 +61,7 @@ internal class StyleValueFrameDiagnostic : IValueFrameDiagnostic return string.Concat(selectors); } + + [Unstable("Compatibility with 11.x")] + public AppliedStyle AsAppliedStyle() => new AppliedStyle(_styleInstance); } diff --git a/src/Avalonia.Base/Diagnostics/StyledElementExtensions.cs b/src/Avalonia.Base/Diagnostics/StyledElementExtensions.cs index 32bbe78218..b4d52c0548 100644 --- a/src/Avalonia.Base/Diagnostics/StyledElementExtensions.cs +++ b/src/Avalonia.Base/Diagnostics/StyledElementExtensions.cs @@ -1,8 +1,14 @@ -namespace Avalonia.Diagnostics; +using System; +using System.Linq; +using Avalonia.Metadata; +using Avalonia.Styling; + +namespace Avalonia.Diagnostics; /// /// Defines diagnostic extensions on s. /// +[PrivateApi] public static class StyledElementExtensions { /// @@ -13,4 +19,15 @@ public static class StyledElementExtensions { return styledElement.GetValueStore().GetStoreDiagnostic(); } + + [Obsolete("Use StyledElementExtensions.GetValueStoreDiagnostic instead", true)] + public static StyleDiagnostics GetStyleDiagnostics(this StyledElement styledElement) + { + var diagnostics = styledElement.GetValueStore().GetStoreDiagnostic(); + return new StyleDiagnostics(diagnostics.AppliedFrames + .OfType() + .Select(f => f.AsAppliedStyle()) + .ToArray()); + } } + diff --git a/src/Avalonia.Base/Diagnostics/ValueStoreDiagnostic.cs b/src/Avalonia.Base/Diagnostics/ValueStoreDiagnostic.cs index e4880cdc76..c9a3374bcc 100644 --- a/src/Avalonia.Base/Diagnostics/ValueStoreDiagnostic.cs +++ b/src/Avalonia.Base/Diagnostics/ValueStoreDiagnostic.cs @@ -1,8 +1,10 @@ using System.Collections.Generic; +using Avalonia.Metadata; using Avalonia.Styling; namespace Avalonia.Diagnostics; +[PrivateApi] public class ValueStoreDiagnostic { /// diff --git a/src/Avalonia.Base/Media/Fonts/Tables/InvalidFontTableException.cs b/src/Avalonia.Base/Media/Fonts/Tables/InvalidFontTableException.cs index d8be26a848..435e5e46e3 100644 --- a/src/Avalonia.Base/Media/Fonts/Tables/InvalidFontTableException.cs +++ b/src/Avalonia.Base/Media/Fonts/Tables/InvalidFontTableException.cs @@ -10,7 +10,7 @@ namespace Avalonia.Media.Fonts.Tables /// Exception font loading can throw if it encounters invalid data during font loading. /// /// - public class InvalidFontTableException : Exception + internal class InvalidFontTableException : Exception { /// /// Initializes a new instance of the class. diff --git a/src/Avalonia.Base/Media/Fonts/Tables/KnownNameIds.cs b/src/Avalonia.Base/Media/Fonts/Tables/KnownNameIds.cs index 82e6926600..6212e68bff 100644 --- a/src/Avalonia.Base/Media/Fonts/Tables/KnownNameIds.cs +++ b/src/Avalonia.Base/Media/Fonts/Tables/KnownNameIds.cs @@ -8,7 +8,7 @@ namespace Avalonia.Media.Fonts.Tables /// Provides enumeration of common name ids /// /// - public enum KnownNameIds : ushort + internal enum KnownNameIds : ushort { /// /// The copyright notice diff --git a/src/Avalonia.Base/Media/Fonts/Tables/MissingFontTableException.cs b/src/Avalonia.Base/Media/Fonts/Tables/MissingFontTableException.cs index 890414fc59..29b480cfd0 100644 --- a/src/Avalonia.Base/Media/Fonts/Tables/MissingFontTableException.cs +++ b/src/Avalonia.Base/Media/Fonts/Tables/MissingFontTableException.cs @@ -10,7 +10,7 @@ namespace Avalonia.Media.Fonts.Tables /// Exception font loading can throw if it finds a required table is missing during font loading. /// /// - public class MissingFontTableException : Exception + internal class MissingFontTableException : Exception { /// /// Initializes a new instance of the class. diff --git a/src/Browser/Avalonia.Browser/Rendering/RenderWorker.cs b/src/Browser/Avalonia.Browser/Rendering/RenderWorker.cs index 6fe8d2ee73..96cc2ca1a6 100644 --- a/src/Browser/Avalonia.Browser/Rendering/RenderWorker.cs +++ b/src/Browser/Avalonia.Browser/Rendering/RenderWorker.cs @@ -10,7 +10,7 @@ using Avalonia.Browser.Interop; namespace Avalonia.Browser.Rendering; -public partial class RenderWorker +internal partial class RenderWorker { [DllImport("*")] private static extern int pthread_self();