Browse Source

Make IStyleInstance internal.

Expose it for diagnostics via `AppliedStyle` wrapper.
pull/11436/head
Steven Kirk 3 years ago
parent
commit
54b8a55588
  1. 18
      src/Avalonia.Base/Diagnostics/AppliedStyle.cs
  2. 4
      src/Avalonia.Base/Diagnostics/StyleDiagnostics.cs
  3. 4
      src/Avalonia.Base/StyledElement.cs
  4. 3
      src/Avalonia.Base/Styling/IStyleInstance.cs
  5. 2
      src/Avalonia.Diagnostics/Diagnostics/ViewModels/ControlDetailsViewModel.cs
  6. 4
      src/Avalonia.Diagnostics/Diagnostics/ViewModels/StyleViewModel.cs

18
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;
}
}

4
src/Avalonia.Base/Diagnostics/StyleDiagnostics.cs

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

4
src/Avalonia.Base/StyledElement.cs

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

3
src/Avalonia.Base/Styling/IStyleInstance.cs

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

2
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. // 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)) foreach (var appliedStyle in styleDiagnostics.AppliedStyles.OrderBy(s => s.HasActivator))
{ {
var styleSource = appliedStyle.Source; var styleSource = appliedStyle.Style;
var setters = new List<SetterViewModel>(); var setters = new List<SetterViewModel>();

4
src/Avalonia.Diagnostics/Diagnostics/ViewModels/StyleViewModel.cs

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

Loading…
Cancel
Save