From c941bd5a4b3742ffeadae1d170d70f15e08d1996 Mon Sep 17 00:00:00 2001 From: Bryan Housel Date: Fri, 31 Oct 2014 11:58:02 -0400 Subject: [PATCH] 2 things related to gatherStats auto-hiding.. * skip gatherStats on differenced redraws.. * force full redraw when gatherStats autohides/unhides features (before: extent redraws would happen, counts would update, but buildings/points would stay on the screen) --- js/id/renderer/features.js | 7 ++++++- js/id/renderer/map.js | 23 +++++++++++++++-------- 2 files changed, 21 insertions(+), 9 deletions(-) diff --git a/js/id/renderer/features.js b/js/id/renderer/features.js index 20b516fd8..30da65e89 100644 --- a/js/id/renderer/features.js +++ b/js/id/renderer/features.js @@ -212,7 +212,9 @@ iD.Features = function(context) { features.gatherStats = function(d, graph, dimensions) { var hidden = features.hidden(), - keys = features.keys(); + keys = features.keys(), + needsRedraw = false; + resolver = graph || resolver; _.each(feature, function(f) { f.count = 0; }); @@ -231,7 +233,10 @@ iD.Features = function(context) { if (hidden !== features.hidden()) { dispatch.change(); + needsRedraw = true; } + + return needsRedraw; }; features.stats = function() { diff --git a/js/id/renderer/map.js b/js/id/renderer/map.js index e26b5cb0a..15c22a5a6 100644 --- a/js/id/renderer/map.js +++ b/js/id/renderer/map.js @@ -105,17 +105,24 @@ iD.Map = function(context) { data = _.compact(_.values(complete)); filter = function(d) { return d.id in complete; }; - } else if (extent) { - data = context.intersects(map.extent().intersection(extent)); - var set = d3.set(_.pluck(data, 'id')); - filter = function(d) { return set.has(d.id); }; - } else { - data = all; - filter = d3.functor(true); + // force a full redraw if gatherStats detects that a feature + // should be auto-hidden (e.g. points or buildings).. + if (features.gatherStats(all, graph, dimensions)) { + extent = undefined; + } + + if (extent) { + data = context.intersects(map.extent().intersection(extent)); + var set = d3.set(_.pluck(data, 'id')); + filter = function(d) { return set.has(d.id); }; + + } else { + data = all; + filter = d3.functor(true); + } } - features.gatherStats(all, graph, dimensions); data = features.filter(data, graph); surface