@@ -169,6 +169,12 @@ Layer <- ggproto("Layer", NULL,
169169 geom_params = NULL ,
170170 stat = NULL ,
171171 stat_params = NULL ,
172+
173+ # These two fields carry state throughout rendering but will always be
174+ # calculated before use
175+ computed_geom_params = NULL ,
176+ computed_stat_params = NULL ,
177+
172178 data = NULL ,
173179 aes_params = NULL ,
174180 mapping = NULL ,
@@ -276,9 +282,9 @@ Layer <- ggproto("Layer", NULL,
276282 if (empty(data ))
277283 return (new_data_frame())
278284
279- params <- self $ stat $ setup_params(data , self $ stat_params )
280- data <- self $ stat $ setup_data(data , params )
281- self $ stat $ compute_layer(data , params , layout )
285+ self $ computed_stat_params <- self $ stat $ setup_params(data , self $ stat_params )
286+ data <- self $ stat $ setup_data(data , self $ computed_stat_params )
287+ self $ stat $ compute_layer(data , self $ computed_stat_params , layout )
282288 },
283289
284290 map_statistic = function (self , data , plot ) {
@@ -339,8 +345,8 @@ Layer <- ggproto("Layer", NULL,
339345 c(names(data ), names(self $ aes_params )),
340346 snake_class(self $ geom )
341347 )
342- self $ geom_params <- self $ geom $ setup_params(data , c(self $ geom_params , self $ aes_params ))
343- self $ geom $ setup_data(data , self $ geom_params )
348+ self $ computed_geom_params <- self $ geom $ setup_params(data , c(self $ geom_params , self $ aes_params ))
349+ self $ geom $ setup_data(data , self $ computed_geom_params )
344350 },
345351
346352 compute_position = function (self , data , layout ) {
@@ -363,7 +369,7 @@ Layer <- ggproto("Layer", NULL,
363369 },
364370
365371 finish_statistics = function (self , data ) {
366- self $ stat $ finish_layer(data , self $ stat_params )
372+ self $ stat $ finish_layer(data , self $ computed_stat_params )
367373 },
368374
369375 draw_geom = function (self , data , layout ) {
@@ -372,8 +378,8 @@ Layer <- ggproto("Layer", NULL,
372378 return (rep(list (zeroGrob()), n ))
373379 }
374380
375- data <- self $ geom $ handle_na(data , self $ geom_params )
376- self $ geom $ draw_layer(data , self $ geom_params , layout , layout $ coord )
381+ data <- self $ geom $ handle_na(data , self $ computed_geom_params )
382+ self $ geom $ draw_layer(data , self $ computed_geom_params , layout , layout $ coord )
377383 }
378384)
379385
0 commit comments