public StyleMatchingContext(Action <VisualElement, MatchResultInfo> processResult) { styleSheetStack = new List <StyleSheet>(); variableContext = StyleVariableContext.none; currentElement = null; this.processResult = processResult; }
public void InsertRange(int index, StyleVariableContext other) { if (other.m_Variables.Count > 0) { m_DirtyVariableHash = true; m_Variables.InsertRange(index, other.m_Variables); } }
public void AddInitialRange(StyleVariableContext other) { if (other.m_Variables.Count > 0) { Debug.Assert(m_Variables.Count == 0); m_VariableHash = other.m_VariableHash; m_Variables.AddRange(other.m_Variables); } }
public void AddInitialRange(StyleVariableContext other) { bool flag = other.m_Variables.Count > 0; if (flag) { Debug.Assert(this.m_Variables.Count == 0); this.m_VariableHash = other.m_VariableHash; this.m_Variables.AddRange(other.m_Variables); this.m_SortedHash.AddRange(other.m_SortedHash); } }
public StyleVariableContext(StyleVariableContext other) { m_Variables = new List <StyleVariable>(other.m_Variables); }
public static void SetValue(int hash, StyleVariableContext data) { s_StyleVariableContextCache[hash] = data; }
public static bool TryGetValue(int hash, out StyleVariableContext data) { return(s_StyleVariableContextCache.TryGetValue(hash, out data)); }
void ProcessMatchedRules(VisualElement element, List <SelectorMatchRecord> matchingSelectors) { matchingSelectors.Sort((a, b) => SelectorMatchRecord.Compare(a, b)); Int64 matchingRulesHash = element.fullTypeName.GetHashCode(); // Let current DPI contribute to the hash so cache is invalidated when this changes matchingRulesHash = (matchingRulesHash * 397) ^ currentPixelsPerPoint.GetHashCode(); int oldVariablesHash = m_StyleMatchingContext.variableContext.GetVariableHash(); int customPropertiesCount = 0; foreach (var record in matchingSelectors) { StyleRule rule = record.complexSelector.rule; int specificity = record.complexSelector.specificity; matchingRulesHash = (matchingRulesHash * 397) ^ rule.GetHashCode(); matchingRulesHash = (matchingRulesHash * 397) ^ specificity; if (rule.customPropertiesCount > 0) { customPropertiesCount += rule.customPropertiesCount; ProcessMatchedVariables(record.sheet, rule); } } var parent = element.hierarchy.parent; int inheritedStyleHash = parent != null ? parent.inheritedStylesHash : 0; matchingRulesHash = (matchingRulesHash * 397) ^ inheritedStyleHash; int variablesHash = oldVariablesHash; if (customPropertiesCount > 0) { // Element defines new variables, add the parents variables at the beginning of the processing context m_ProcessVarContext.InsertRange(0, m_StyleMatchingContext.variableContext); variablesHash = m_ProcessVarContext.GetVariableHash(); } matchingRulesHash = (matchingRulesHash * 397) ^ variablesHash; if (oldVariablesHash != variablesHash) { StyleVariableContext ctx; if (!StyleCache.TryGetValue(variablesHash, out ctx)) { ctx = new StyleVariableContext(m_ProcessVarContext); StyleCache.SetValue(variablesHash, ctx); } m_StyleMatchingContext.variableContext = ctx; } element.variableContext = m_StyleMatchingContext.variableContext; m_ProcessVarContext.Clear(); ComputedStyle resolvedStyles; if (StyleCache.TryGetValue(matchingRulesHash, out resolvedStyles)) { element.SetSharedStyles(resolvedStyles); } else { var parentStyle = parent?.computedStyle; resolvedStyles = ComputedStyle.Create(parentStyle, true); float dpiScaling = element.scaledPixelsPerPoint; foreach (var record in matchingSelectors) { m_StylePropertyReader.SetContext(record.sheet, record.complexSelector, m_StyleMatchingContext.variableContext, dpiScaling); resolvedStyles.ApplyProperties(m_StylePropertyReader, parentStyle); } resolvedStyles.FinalizeApply(parentStyle); StyleCache.SetValue(matchingRulesHash, resolvedStyles); element.SetSharedStyles(resolvedStyles); } }
void ProcessMatchedRules(VisualElement element, List <SelectorMatchRecord> matchingSelectors) { matchingSelectors.Sort(SelectorMatchRecord.Compare); Int64 matchingRulesHash = element.fullTypeName.GetHashCode(); // Let current DPI contribute to the hash so cache is invalidated when this changes matchingRulesHash = (matchingRulesHash * 397) ^ currentPixelsPerPoint.GetHashCode(); int oldVariablesHash = m_StyleMatchingContext.variableContext.GetVariableHash(); int customPropertiesCount = 0; foreach (var record in matchingSelectors) { StyleRule rule = record.complexSelector.rule; int specificity = record.complexSelector.specificity; matchingRulesHash = (matchingRulesHash * 397) ^ rule.GetHashCode(); matchingRulesHash = (matchingRulesHash * 397) ^ specificity; if (rule.customPropertiesCount > 0) { customPropertiesCount += rule.customPropertiesCount; ProcessMatchedVariables(record.sheet, rule); } } int variablesHash = customPropertiesCount > 0 ? m_ProcessVarContext.GetVariableHash() : oldVariablesHash; matchingRulesHash = (matchingRulesHash * 397) ^ variablesHash; if (oldVariablesHash != variablesHash) { StyleVariableContext ctx; if (!StyleCache.TryGetValue(variablesHash, out ctx)) { ctx = new StyleVariableContext(m_ProcessVarContext); StyleCache.SetValue(variablesHash, ctx); } m_StyleMatchingContext.variableContext = ctx; } element.variableContext = m_StyleMatchingContext.variableContext; VisualElementStylesData resolvedStyles; if (StyleCache.TryGetValue(matchingRulesHash, out resolvedStyles)) { element.SetSharedStyles(resolvedStyles); } else { resolvedStyles = new VisualElementStylesData(isShared: true); foreach (var record in matchingSelectors) { m_StylePropertyReader.SetContext(record.sheet, record.complexSelector, m_StyleMatchingContext.variableContext); resolvedStyles.ApplyProperties(m_StylePropertyReader, m_StyleMatchingContext.inheritedStyle); } resolvedStyles.ApplyLayoutValues(); StyleCache.SetValue(matchingRulesHash, resolvedStyles); element.SetSharedStyles(resolvedStyles); } }
public StyleVariableContext(StyleVariableContext other) { this.m_Variables = new List <StyleVariable>(other.m_Variables); this.m_VariableHash = other.m_VariableHash; this.m_SortedHash = new List <int>(other.m_SortedHash); }