public static bool FindVariableOrigin(VisualElement currentVisualElement, string variableName, out StyleSheet outStyleSheet, out StyleComplexSelector outSelector) { outSelector = null; outStyleSheet = null; if (string.IsNullOrEmpty(variableName)) { return(false); } // Traverse the element's parent hierarchy to find best matching selector that define the variable var extractor = new MatchedRulesExtractor(); var current = currentVisualElement; while (current != null) { extractor.selectedElementRules.Clear(); extractor.selectedElementStylesheets.Clear(); extractor.FindMatchingRules(current); var matchedRules = extractor.selectedElementRules; for (var i = matchedRules.Count - 1; i >= 0; --i) { var matchRecord = matchedRules.ElementAt(i).matchRecord; var ruleProperty = matchRecord.sheet.FindProperty(matchRecord.complexSelector.rule, variableName); if (ruleProperty != null) { outSelector = matchRecord.complexSelector; outStyleSheet = matchRecord.sheet; break; } } if (outSelector != null) { break; } current = current.parent; } // If the current visual element is a fake elemennt created for the selector being edited and that the selector found is a fake selector then return the effective selector associated to the fake visual element if (outSelector != null && current == currentVisualElement && StyleSheetToUss.ToUssSelector(outSelector).Contains(BuilderConstants.StyleSelectorElementName)) { outSelector = currentVisualElement.GetStyleComplexSelector(); } return(outSelector != null); }
public static List <string> GetMatchingSelectorsOnElement(VisualElement documentElement) { var matchedElementsSelector = new MatchedRulesExtractor(); matchedElementsSelector.FindMatchingRules(documentElement); if (matchedElementsSelector.selectedElementRules == null || matchedElementsSelector.selectedElementRules.Count <= 0) { return(null); } var complexSelectors = new List <string>(); foreach (var rule in matchedElementsSelector.selectedElementRules) { var complexSelector = rule.matchRecord.complexSelector; var complexSelectorString = StyleSheetToUss.ToUssSelector(complexSelector); complexSelectors.Add(complexSelectorString); } return(complexSelectors); }
public BuilderInspectorMatchingSelectors(BuilderInspector inspector) { m_Inspector = inspector; m_MatchedRulesExtractor = new MatchedRulesExtractor(); }