Browse Source

Make IStyleInstance internal.

Expose it for diagnostics via `AppliedStyle` wrapper.
Steven Kirk 2 years ago
parent
commit
54b8a55588

+ 18 - 0
src/Avalonia.Base/Diagnostics/AppliedStyle.cs

@@ -0,0 +1,18 @@
+using Avalonia.Styling;
+
+namespace Avalonia.Diagnostics
+{
+    public class AppliedStyle
+    {
+        private readonly IStyleInstance _instance;
+
+        internal AppliedStyle(IStyleInstance instance)
+        {
+            _instance = instance;
+        }
+
+        public bool HasActivator => _instance.HasActivator;
+        public bool IsActive => _instance.IsActive;
+        public StyleBase Style => (StyleBase)_instance.Source;
+    }
+}

+ 2 - 2
src/Avalonia.Base/Diagnostics/StyleDiagnostics.cs

@@ -11,9 +11,9 @@ namespace Avalonia.Diagnostics
         /// <summary>
         /// Currently applied styles.
         /// </summary>
-        public IReadOnlyList<IStyleInstance> AppliedStyles { get; }
+        public IReadOnlyList<AppliedStyle> AppliedStyles { get; }
 
-        public StyleDiagnostics(IReadOnlyList<IStyleInstance> appliedStyles)
+        public StyleDiagnostics(IReadOnlyList<AppliedStyle> appliedStyles)
         {
             AppliedStyles = appliedStyles;
         }

+ 2 - 2
src/Avalonia.Base/StyledElement.cs

@@ -420,12 +420,12 @@ namespace Avalonia
 
         internal StyleDiagnostics GetStyleDiagnosticsInternal()
         {
-            var styles = new List<IStyleInstance>();
+            var styles = new List<AppliedStyle>();
 
             foreach (var frame in GetValueStore().Frames)
             {
                 if (frame is IStyleInstance style)
-                    styles.Add(style);
+                    styles.Add(new(style));
             }
 
             return new StyleDiagnostics(styles);

+ 1 - 2
src/Avalonia.Base/Styling/IStyleInstance.cs

@@ -5,8 +5,7 @@ namespace Avalonia.Styling
     /// <summary>
     /// Represents a <see cref="Style"/> that has been instanced on a control.
     /// </summary>
-    [Unstable]
-    public interface IStyleInstance
+    internal interface IStyleInstance
     {
         /// <summary>
         /// Gets the source style.

+ 1 - 1
src/Avalonia.Diagnostics/Diagnostics/ViewModels/ControlDetailsViewModel.cs

@@ -64,7 +64,7 @@ namespace Avalonia.Diagnostics.ViewModels
                 // We need to place styles without activator first, such styles will be overwritten by ones with activators.
                 foreach (var appliedStyle in styleDiagnostics.AppliedStyles.OrderBy(s => s.HasActivator))
                 {
-                    var styleSource = appliedStyle.Source;
+                    var styleSource = appliedStyle.Style;
 
                     var setters = new List<SetterViewModel>();
 

+ 2 - 2
src/Avalonia.Diagnostics/Diagnostics/ViewModels/StyleViewModel.cs

@@ -5,11 +5,11 @@ namespace Avalonia.Diagnostics.ViewModels
 {
     internal class StyleViewModel : ViewModelBase
     {
-        private readonly IStyleInstance _styleInstance;
+        private readonly AppliedStyle _styleInstance;
         private bool _isActive;
         private bool _isVisible;
 
-        public StyleViewModel(IStyleInstance styleInstance, string name, List<SetterViewModel> setters)
+        public StyleViewModel(AppliedStyle styleInstance, string name, List<SetterViewModel> setters)
         {
             _styleInstance = styleInstance;
             IsVisible = true;