/// <summary> /// Set PseudoState into visualElement to mimic input behaviour. /// </summary> /// <param name="visualElement">VisualElement instance.</param> /// <param name="state">Pseudo state of a VisualElement: Active, Hover, Checked, Disabled, Focus, Root.</param> public static void SetPseudoState(this VisualElement visualElement, PseudoStates state) { int intState = (int)state; var property = typeof(VisualElement).GetProperty("pseudoStates", BindingFlags.Instance | BindingFlags.NonPublic); property?.SetMethod?.Invoke(visualElement, new object[] { intState }); }
private static T Add <T>(VisualElement parent, PseudoStates pseudo = 0) where T : VisualElement, new() { var element = new T(); element.pseudoStates |= pseudo; if ((pseudo & PseudoStates.Disabled) == PseudoStates.Disabled) { element.SetEnabled(false); } ApplyModificationsToInputs(element, BaseField <int> .inputUssClassName, pseudo); IgnoreAllInputsRecursive(element); var description = pseudo.ToString(); if (pseudo == 0) { description = "Normal"; } if (element is TextElement) { (element as TextElement).text = description; } else if (element is BaseField <bool> ) { (element as BaseField <bool>).label = description; } else if (element is BaseField <float> ) { (element as BaseField <float>).label = description; } else if (element is BaseField <string> ) { (element as BaseField <string>).label = description; } else if (element is BaseField <Vector3> ) { (element as BaseField <Vector3>).label = description; } else if (element is BaseField <Rect> ) { (element as BaseField <Rect>).label = description; } else if (element is Foldout) { var foldout = element as Foldout; foldout.text = description; foldout.value = (pseudo & PseudoStates.Checked) == PseudoStates.Checked; var contents = new Label("Content with Border"); contents.AddToClassList(s_StyleFoldoutClassName); foldout.Add(contents); } parent.Add(element); return(element); }
internal void CachePseudoStateMasks() { // If we have already cached data on this selector, skip it if (selectors[0].pseudoStateMask != -1) { return; } // lazily build a cache of pseudo state names if (s_PseudoStates == null) { s_PseudoStates = new Dictionary <string, PseudoStateData>(); s_PseudoStates["active"] = new PseudoStateData(PseudoStates.Active, false); s_PseudoStates["hover"] = new PseudoStateData(PseudoStates.Hover, false); s_PseudoStates["checked"] = new PseudoStateData(PseudoStates.Checked, false); s_PseudoStates["selected"] = new PseudoStateData(PseudoStates.Checked, false); //for backward-compatibility s_PseudoStates["disabled"] = new PseudoStateData(PseudoStates.Disabled, false); s_PseudoStates["focus"] = new PseudoStateData(PseudoStates.Focus, false); s_PseudoStates["root"] = new PseudoStateData(PseudoStates.Root, false); // A few substates can be negated, meaning them match if the flag is not set s_PseudoStates["inactive"] = new PseudoStateData(PseudoStates.Active, true); s_PseudoStates["enabled"] = new PseudoStateData(PseudoStates.Disabled, true); } for (int j = 0, subCount = selectors.Length; j < subCount; j++) { StyleSelector selector = selectors[j]; StyleSelectorPart[] parts = selector.parts; PseudoStates pseudoClassMask = 0; PseudoStates negatedPseudoClassMask = 0; for (int i = 0; i < selector.parts.Length; i++) { if (selector.parts[i].type == StyleSelectorType.PseudoClass) { PseudoStateData data; if (s_PseudoStates.TryGetValue(parts[i].value, out data)) { if (!data.negate) { pseudoClassMask |= data.state; } else { negatedPseudoClassMask |= data.state; } } else { Debug.LogWarningFormat("Unknown pseudo class \"{0}\"", parts[i].value); } } } selector.pseudoStateMask = (int)pseudoClassMask; selector.negatedPseudoStateMask = (int)negatedPseudoClassMask; } }
public static void CachePseudoStateMasks(this StyleComplexSelector complexSelector) { if (complexSelector.selectors[0].pseudoStateMask == -1) { if (StyleComplexSelectorExtensions.s_PseudoStates == null) { StyleComplexSelectorExtensions.s_PseudoStates = new Dictionary <string, StyleComplexSelectorExtensions.PseudoStateData>(); StyleComplexSelectorExtensions.s_PseudoStates["active"] = new StyleComplexSelectorExtensions.PseudoStateData(PseudoStates.Active, false); StyleComplexSelectorExtensions.s_PseudoStates["hover"] = new StyleComplexSelectorExtensions.PseudoStateData(PseudoStates.Hover, false); StyleComplexSelectorExtensions.s_PseudoStates["checked"] = new StyleComplexSelectorExtensions.PseudoStateData(PseudoStates.Checked, false); StyleComplexSelectorExtensions.s_PseudoStates["selected"] = new StyleComplexSelectorExtensions.PseudoStateData(PseudoStates.Selected, false); StyleComplexSelectorExtensions.s_PseudoStates["disabled"] = new StyleComplexSelectorExtensions.PseudoStateData(PseudoStates.Disabled, false); StyleComplexSelectorExtensions.s_PseudoStates["focus"] = new StyleComplexSelectorExtensions.PseudoStateData(PseudoStates.Focus, false); StyleComplexSelectorExtensions.s_PseudoStates["inactive"] = new StyleComplexSelectorExtensions.PseudoStateData(PseudoStates.Active, true); StyleComplexSelectorExtensions.s_PseudoStates["enabled"] = new StyleComplexSelectorExtensions.PseudoStateData(PseudoStates.Disabled, true); } int i = 0; int num = complexSelector.selectors.Length; while (i < num) { StyleSelector styleSelector = complexSelector.selectors[i]; StyleSelectorPart[] parts = styleSelector.parts; PseudoStates pseudoStates = (PseudoStates)0; PseudoStates pseudoStates2 = (PseudoStates)0; for (int j = 0; j < styleSelector.parts.Length; j++) { if (styleSelector.parts[j].type == StyleSelectorType.PseudoClass) { StyleComplexSelectorExtensions.PseudoStateData pseudoStateData; if (StyleComplexSelectorExtensions.s_PseudoStates.TryGetValue(parts[j].value, out pseudoStateData)) { if (!pseudoStateData.negate) { pseudoStates |= pseudoStateData.state; } else { pseudoStates2 |= pseudoStateData.state; } } else { Debug.LogWarningFormat("Unknown pseudo class \"{0}\"", new object[] { parts[j].value }); } } } styleSelector.pseudoStateMask = (int)pseudoStates; styleSelector.negatedPseudoStateMask = (int)pseudoStates2; i++; } } }
public readonly PseudoStates dependencyPseudoMask; // what pseudo states if set, would have given a different result public MatchResultInfo(bool success, PseudoStates triggerPseudoMask, PseudoStates dependencyPseudoMask) { this.success = success; this.triggerPseudoMask = triggerPseudoMask; this.dependencyPseudoMask = dependencyPseudoMask; }
private static void ApplyModificationsToInputs(VisualElement element, string className, PseudoStates pseudo) { element.Query(classes: new string[] { className }).ForEach(e => { e.pseudoStates |= pseudo; }); }
private QueryBuilder <T> AddNegativePseudoState(PseudoStates s) { negatedPseudoStatesMask = negatedPseudoStatesMask | (int)s; return(this); }
private QueryBuilder <T> AddPseudoState(PseudoStates s) { pseudoStatesMask = pseudoStatesMask | (int)s; return(this); }
private UQuery.QueryBuilder <T> AddNegativePseudoState(PseudoStates s) { this.negatedPseudoStatesMask |= (int)s; return(this); }
private UQuery.QueryBuilder <T> AddPseudoState(PseudoStates s) { this.pseudoStatesMask |= (int)s; return(this); }
public PseudoStateData(PseudoStates state, bool negate) { this.state = state; this.negate = negate; }
private static T Add <T>(VisualElement parent, PseudoStates pseudo = 0) where T : VisualElement, new() { var element = new T(); // Pseudo states get cleared on attaching to panel, so this must be done each time that happens. // Doing it just when we create the window doesn't work because when docked, all views docked in the same // place share the panel and get attached/detached as we switch tabs. element.RegisterCallback <AttachToPanelEvent>(evt => { element.pseudoStates |= pseudo; // The children will still attach to panel, so we need to delay the uQuery call until that's done. element.schedule.Execute(() => ApplyModificationsToInputs(element, BaseField <int> .inputUssClassName, pseudo)); }); if ((pseudo & PseudoStates.Disabled) == PseudoStates.Disabled) { element.SetEnabled(false); } IgnoreAllInputsRecursive(element); var description = pseudo.ToString(); if (pseudo == 0) { description = "Normal"; } if (element is TextElement) { (element as TextElement).text = description; } else if (element is BaseField <bool> ) { (element as BaseField <bool>).label = description; } else if (element is BaseField <float> ) { (element as BaseField <float>).label = description; } else if (element is BaseField <string> ) { (element as BaseField <string>).label = description; } else if (element is BaseField <Vector3> ) { (element as BaseField <Vector3>).label = description; } else if (element is BaseField <Rect> ) { (element as BaseField <Rect>).label = description; } else if (element is Foldout) { var foldout = element as Foldout; foldout.text = description; foldout.value = (pseudo & PseudoStates.Checked) == PseudoStates.Checked; var contents = new Label("Content with Border"); contents.AddToClassList(s_StyleFoldoutClassName); foldout.Add(contents); } else if (element is HelpBox) { var helpBox = element as HelpBox; helpBox.text = description; helpBox.messageType = HelpBoxMessageType.Info; } parent.Add(element); return(element); }