Only notify when extent changes.

This avoids unnecessary work and some infinite loops.
This commit is contained in:
Mike Bostock 2013-08-13 10:07:51 -07:00
Родитель fb4f262440
Коммит e7a1ff72a8
3 изменённых файлов: 25 добавлений и 11 удалений

19
d3.js поставляемый
Просмотреть файл

@ -7975,13 +7975,20 @@ d3 = function() {
});
});
});
} else {
} else if (extent0 !== extent) {
extent0 = extent;
g.each(function() {
event.of(this, arguments)({
var event_ = event.of(this, arguments);
event_({
type: "brushstart"
});
event_({
type: "brush",
mode: "resize"
});
event_({
type: "brushend"
});
});
}
}
@ -8128,7 +8135,7 @@ d3 = function() {
return brush;
};
brush.extent = function(z) {
var x0, x1, y0, y1, t;
var x0, x1, y0, y1, t, dirty;
if (!arguments.length) {
z = extentDomain || extent;
if (x) {
@ -8156,6 +8163,7 @@ d3 = function() {
extentDomain[0][0] = x0, extentDomain[1][0] = x1;
if (x.invert) x0 = x(x0), x1 = x(x1);
if (x1 < x0) t = x0, x0 = x1, x1 = t;
dirty |= x0 ^ extent[0][0] | x1 ^ extent[1][0];
}
if (y) {
y0 = z[0], y1 = z[1];
@ -8163,13 +8171,14 @@ d3 = function() {
extentDomain[0][1] = y0, extentDomain[1][1] = y1;
if (y.invert) y0 = y(y0), y1 = y(y1);
if (y1 < y0) t = y0, y0 = y1, y1 = t;
dirty |= y0 ^ extent[0][1] | y1 ^ extent[1][1];
}
extent = [ [ x0 | 0, y0 | 0 ], [ x1 | 0, y1 | 0 ] ];
if (dirty) extent = [ [ x0 | 0, y0 | 0 ], [ x1 | 0, y1 | 0 ] ];
return brush;
};
brush.clear = function() {
extentDomain = null;
extent = [ [ 0, 0 ], [ 0, 0 ] ];
if (!brush.empty()) extent = [ [ 0, 0 ], [ 0, 0 ] ];
return brush;
};
brush.empty = function() {

2
d3.min.js поставляемый

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Просмотреть файл

@ -96,10 +96,13 @@ d3.svg.brush = function() {
})
.each("end.brush", function() { event_({type: "brushend"}); });
});
} else {
} else if (extent0 !== extent) {
extent0 = extent;
g.each(function() {
event.of(this, arguments)({type: "brush", mode: "resize"});
var event_ = event.of(this, arguments);
event_({type: "brushstart"});
event_({type: "brush", mode: "resize"});
event_({type: "brushend"});
});
}
}
@ -328,7 +331,7 @@ d3.svg.brush = function() {
};
brush.extent = function(z) {
var x0, x1, y0, y1, t;
var x0, x1, y0, y1, t, dirty;
// Invert the pixel extent to data-space.
if (!arguments.length) {
@ -360,6 +363,7 @@ d3.svg.brush = function() {
extentDomain[0][0] = x0, extentDomain[1][0] = x1;
if (x.invert) x0 = x(x0), x1 = x(x1);
if (x1 < x0) t = x0, x0 = x1, x1 = t;
dirty |= x0 ^ extent[0][0] | x1 ^ extent[1][0];
}
if (y) {
y0 = z[0], y1 = z[1];
@ -367,15 +371,16 @@ d3.svg.brush = function() {
extentDomain[0][1] = y0, extentDomain[1][1] = y1;
if (y.invert) y0 = y(y0), y1 = y(y1);
if (y1 < y0) t = y0, y0 = y1, y1 = t;
dirty |= y0 ^ extent[0][1] | y1 ^ extent[1][1];
}
extent = [[x0 | 0, y0 | 0], [x1 | 0, y1 | 0]]; // copy-on-write
if (dirty) extent = [[x0 | 0, y0 | 0], [x1 | 0, y1 | 0]]; // copy-on-write
return brush;
};
brush.clear = function() {
extentDomain = null;
extent = [[0, 0], [0, 0]]; // copy-on-write
if (!brush.empty()) extent = [[0, 0], [0, 0]]; // copy-on-write
return brush;
};