Allowed multiple Pseudo Classes per element. (#846)

* Quick fix to flashlight radius

* SomethingAbout CSS Class

* Shitty update

* fuck

* Creativ!

* Last But not least

* Quick Change

* Fixed version

* Tiny fix

* Next Fix

* Another fix
This commit is contained in:
CatTheSystem
2019-08-20 22:22:14 +03:00
committed by Pieter-Jan Briers
parent 7f9f593989
commit fc67c5069c
7 changed files with 62 additions and 36 deletions

View File

@@ -11,7 +11,9 @@ namespace Robust.Client.UserInterface
private readonly Dictionary<string, object> _styleProperties = new Dictionary<string, object>();
private readonly HashSet<string> _styleClasses = new HashSet<string>();
private readonly HashSet<string> _stylePseudoClass = new HashSet<string>();
public ICollection<string> StyleClasses { get; }
public IReadOnlyCollection<string> StylePseudoClass => _stylePseudoClass;
private string _styleIdentifier;
@@ -28,24 +30,41 @@ namespace Robust.Client.UserInterface
}
}
private string _stylePseudoClass;
[ViewVariables]
public string StylePseudoClass
public bool HasStylePseudoClass(string className)
{
get => _stylePseudoClass;
protected set
{
if (_stylePseudoClass == value)
{
return;
}
_stylePseudoClass = value;
Restyle();
}
return _stylePseudoClass.Contains(className);
}
protected void AddStylePseudoClass(string className)
{
if (_stylePseudoClass.Contains(className))
{
return;
}
_stylePseudoClass.Add(className);
Restyle();
}
protected void RemoveStylePseudoClass(string className)
{
_stylePseudoClass.Remove(className);
Restyle();
}
protected void SetOnlyStylePseudoClass(string className)
{
_stylePseudoClass.Clear();
if (className == null)
{
Restyle();
return;
}
_stylePseudoClass.Add(className);
Restyle();
}
public bool HasStyleClass(string className)
{
return _styleClasses.Contains(className);

View File

@@ -202,16 +202,16 @@ namespace Robust.Client.UserInterface.Controls
switch (DrawMode)
{
case DrawModeEnum.Normal:
StylePseudoClass = StylePseudoClassNormal;
SetOnlyStylePseudoClass(StylePseudoClassNormal);
break;
case DrawModeEnum.Pressed:
StylePseudoClass = StylePseudoClassPressed;
SetOnlyStylePseudoClass(StylePseudoClassPressed);
break;
case DrawModeEnum.Hover:
StylePseudoClass = StylePseudoClassHover;
SetOnlyStylePseudoClass(StylePseudoClassHover);
break;
case DrawModeEnum.Disabled:
StylePseudoClass = StylePseudoClassDisabled;
SetOnlyStylePseudoClass(StylePseudoClassDisabled);
break;
default:
throw new ArgumentOutOfRangeException();

View File

@@ -399,7 +399,7 @@ namespace Robust.Client.UserInterface.Controls
private void _updatePseudoClass()
{
StylePseudoClass = IsPlaceHolderVisible ? StylePseudoClassPlaceholder : null;
SetOnlyStylePseudoClass(IsPlaceHolderVisible ? StylePseudoClassPlaceholder : null);
}
public enum AlignMode

View File

@@ -1,4 +1,4 @@
using System;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
@@ -206,14 +206,14 @@ namespace Robust.Client.UserInterface.Controls
OnMouseEntered?.Invoke();
StylePseudoClass = StylePseudoClassHover;
SetOnlyStylePseudoClass(StylePseudoClassHover);
}
protected internal override void MouseExited()
{
base.MouseExited();
StylePseudoClass = null;
SetOnlyStylePseudoClass(null);
}
}

View File

@@ -154,15 +154,15 @@ namespace Robust.Client.UserInterface.Controls
{
if (_grabData != null)
{
StylePseudoClass = StylePseudoClassGrabbed;
SetOnlyStylePseudoClass(StylePseudoClassGrabbed);
}
else if (_isHovered)
{
StylePseudoClass = StylePseudoClassHover;
SetOnlyStylePseudoClass(StylePseudoClassHover);
}
else
{
StylePseudoClass = null;
SetOnlyStylePseudoClass(null);
}
}

View File

@@ -37,16 +37,16 @@ namespace Robust.Client.UserInterface.Controls
switch (DrawMode)
{
case DrawModeEnum.Normal:
StylePseudoClass = StylePseudoClassNormal;
SetOnlyStylePseudoClass(StylePseudoClassNormal);
break;
case DrawModeEnum.Pressed:
StylePseudoClass = StylePseudoClassPressed;
SetOnlyStylePseudoClass(StylePseudoClassPressed);
break;
case DrawModeEnum.Hover:
StylePseudoClass = StylePseudoClassHover;
SetOnlyStylePseudoClass(StylePseudoClassHover);
break;
case DrawModeEnum.Disabled:
StylePseudoClass = StylePseudoClassDisabled;
SetOnlyStylePseudoClass(StylePseudoClassDisabled);
break;
default:
throw new ArgumentOutOfRangeException();

View File

@@ -1,4 +1,4 @@
using System;
using System;
using System.Collections.Generic;
using JetBrains.Annotations;
using Robust.Shared.Utility;
@@ -148,7 +148,7 @@ namespace Robust.Client.UserInterface
Type elementType,
IReadOnlyCollection<string> elementClasses,
string elementId,
string pseudoClass)
IReadOnlyCollection<string> pseudoClass)
{
if (elementType != null)
{
@@ -172,7 +172,8 @@ namespace Robust.Client.UserInterface
public Type ElementType { get; }
public IReadOnlyCollection<string> ElementClasses { get; }
public string ElementId { get; }
public string PseudoClass { get; }
public IReadOnlyCollection<string> PseudoClass { get; }
public override bool Matches(Control control)
{
@@ -197,9 +198,15 @@ namespace Robust.Client.UserInterface
}
}
if (PseudoClass != null && PseudoClass != control.StylePseudoClass)
if (PseudoClass != null)
{
return false;
foreach (var elementClass in PseudoClass)
{
if (!control.HasStylePseudoClass(elementClass))
{
return false;
}
}
}
return true;
@@ -208,7 +215,7 @@ namespace Robust.Client.UserInterface
public override StyleSpecificity CalculateSpecificity()
{
var countId = ElementId == null ? 0 : 1;
var countClasses = (ElementClasses?.Count ?? 0) + (PseudoClass == null ? 0 : 1);
var countClasses = (ElementClasses?.Count ?? 0) + (PseudoClass?.Count ?? 0);
var countTypes = 0;
if (ElementType != null)
{