@@ -3,6 +3,7 @@ package haxe.ui.styles;
33import haxe .crypto .Sha1 ;
44import haxe .ui .core .Component ;
55import haxe .ui .styles .elements .AnimationKeyFrames ;
6+ import haxe .ui .styles .elements .Directive ;
67import haxe .ui .styles .elements .ImportElement ;
78import haxe .ui .styles .elements .MediaQuery ;
89import haxe .ui .styles .elements .RuleElement ;
@@ -142,18 +143,45 @@ class StyleSheet {
142143 }
143144 }
144145
146+ private var _componentStyleCache = new Map <String , Array <Map <String , Directive >>>();
147+
145148 public function buildStyleFor (c : Component , style : Style = null ): Style {
146149 if (style == null ) {
147150 style = {};
148151 }
149- for (r in rules ) {
150- if (! r .match (c )) {
151- continue ;
152+
153+ var styleCacheKey = @:privateAccess c .styleCacheKey ;
154+
155+ var cachedDirectives = _componentStyleCache .get (styleCacheKey );
156+ if (cachedDirectives != null ) {
157+ for (directives in cachedDirectives ) {
158+ style .mergeDirectives (directives );
159+ }
160+ /*
161+ var n = 0;
162+ for (_ in _componentStyleCache.keys()) {
163+ n++;
164+ }
165+ trace(n);
166+ */
167+ } else {
168+ // trace(styleCacheKey);
169+ cachedDirectives = [];
170+ for (r in rules ) {
171+ if (! r .match (c )) {
172+ continue ;
173+ }
174+
175+ cachedDirectives .push (r .directives );
152176 }
153177
154- style .mergeDirectives (r .directives );
178+ for (directives in cachedDirectives ) {
179+ style .mergeDirectives (directives );
180+ }
181+ _componentStyleCache .set (styleCacheKey , cachedDirectives );
155182 }
156183
184+
157185 return style ;
158186 }
159187}
0 commit comments