private bool MatchRightToLeft(VisualElement element, ref RuleMatcher matcher) { VisualElement visualElement = element; int i = matcher.complexSelector.selectors.Length - 1; VisualElement visualElement2 = null; int num = -1; bool result; while (i >= 0) { if (visualElement == null) { break; } HierarchyTraversal.MatchResultInfo matchResultInfo = this.Match(visualElement, ref matcher, i); this.OnProcessMatchResult(visualElement, ref matcher, ref matchResultInfo); if (!matchResultInfo.success) { if (i < matcher.complexSelector.selectors.Length - 1 && matcher.complexSelector.selectors[i + 1].previousRelationship == StyleSelectorRelationship.Descendent) { visualElement = visualElement.parent; } else { if (visualElement2 == null) { break; } visualElement = visualElement2; i = num; } } else { if (i < matcher.complexSelector.selectors.Length - 1 && matcher.complexSelector.selectors[i + 1].previousRelationship == StyleSelectorRelationship.Descendent) { visualElement2 = visualElement.parent; num = i; } if (--i < 0) { if (this.OnRuleMatchedElement(matcher, element)) { result = true; return(result); } } visualElement = visualElement.parent; } } result = false; return(result); }
public virtual HierarchyTraversal.MatchResultInfo Match(VisualElement element, ref RuleMatcher matcher, int selectorIndex) { HierarchyTraversal.MatchResultInfo result; if (element == null) { result = default(HierarchyTraversal.MatchResultInfo); } else { bool flag = true; StyleSelector styleSelector = matcher.complexSelector.selectors[selectorIndex]; int num = styleSelector.parts.Length; int num2 = 0; int num3 = 0; bool flag2 = true; for (int i = 0; i < num; i++) { bool flag3 = this.MatchSelectorPart(element, styleSelector, styleSelector.parts[i]); if (!flag3) { if (styleSelector.parts[i].type == StyleSelectorType.PseudoClass) { num2 |= styleSelector.pseudoStateMask; num3 |= styleSelector.negatedPseudoStateMask; } else { flag2 = false; } } else if (styleSelector.parts[i].type == StyleSelectorType.PseudoClass) { num3 |= styleSelector.pseudoStateMask; num2 |= styleSelector.negatedPseudoStateMask; } flag &= flag3; } HierarchyTraversal.MatchResultInfo matchResultInfo = new HierarchyTraversal.MatchResultInfo { success = flag }; if (flag || flag2) { matchResultInfo.triggerPseudoMask = (PseudoStates)num2; matchResultInfo.dependencyPseudoMask = (PseudoStates)num3; } result = matchResultInfo; } return(result); }
public override void OnProcessMatchResult(VisualElement element, ref RuleMatcher matcher, ref HierarchyTraversal.MatchResultInfo matchInfo) { element.triggerPseudoMask |= matchInfo.triggerPseudoMask; element.dependencyPseudoMask |= matchInfo.dependencyPseudoMask; }
public virtual void OnProcessMatchResult(VisualElement element, ref RuleMatcher matcher, ref HierarchyTraversal.MatchResultInfo matchInfo) { }