diff options
| author | Alon Levy <alon@pobox.com> | 2015-03-01 01:33:45 +0200 |
|---|---|---|
| committer | Alon Levy <alon@pobox.com> | 2015-03-01 01:33:45 +0200 |
| commit | d3faeac2ef07e4c5817adc0cdf9ecd1ede2e7af4 (patch) | |
| tree | d8ed57abadf8fe4d53bebf2e0cac48b0fca4f1cd /src/client/view/graph_view.js | |
| parent | fe0e2ca9b11e80750cfb5597ae1e7e065f5f13ca (diff) | |
client/graph_view: fix visibility setting to include scale
Diffstat (limited to 'src/client/view/graph_view.js')
| -rw-r--r-- | src/client/view/graph_view.js | 26 |
1 files changed, 13 insertions, 13 deletions
diff --git a/src/client/view/graph_view.js b/src/client/view/graph_view.js index bdd73a8f..df94d6b2 100644 --- a/src/client/view/graph_view.js +++ b/src/client/view/graph_view.js @@ -565,18 +565,23 @@ function GraphView(spec) { function scale_and_move(screen_low, screen_high, rect_low, rect_high, percent, current_scale, current_translate) { - var scaled_low = (rect_low + current_translate) * current_scale, - scaled_high = (rect_high + current_translate) * current_scale; + function forward(x) { return x * current_scale + current_translate; }; + var scaled_low = forward(rect_low), + scaled_high = forward(rect_high), + new_scale; if (segment_in_segment(scaled_low, scaled_high, screen_low, screen_high)) { return [current_scale, current_translate]; } + new_scale = (rect_high == rect_low ? + current_scale : (screen_high - screen_low) / (rect_high - rect_low) * percent); + new_scale = Math.min(3, Math.max(0.1, new_scale)); return [ // scale to percent of screen - rect_high == rect_low ? current_scale : (screen_high - screen_low) / (rect_high - rect_low) * percent + new_scale , - // translate missle to middle - (screen_low + screen_high) / 2 - (rect_high + rect_low) / 2 + // translate middle to middle + ((screen_low + screen_high) / 2 - (rect_high + rect_low) / 2 * new_scale) ]; } @@ -598,20 +603,15 @@ function GraphView(spec) { current_scale, current_translate[0]), y_scale_move = scale_and_move(0, screen_height, y_min, y_max, 0.8, current_scale, current_translate[1]), - max_scale = Math.max(x_scale_move[0], y_scale_move[0]), + min_scale = Math.min(x_scale_move[0], y_scale_move[0]), x_translate = x_scale_move[1], y_translate = y_scale_move[1]; - console.log('x = [' + x_min + ', ' + x_max + ']'); - console.log('y = [' + y_min + ', ' + y_max + ']'); - console.log('[scale, x_translate, y_translate] = [' + - max_scale + ', ' + x_translate + ', ' + y_translate + ']'); - if (/*max_scale !== current_scale ||*/ x_translate !== current_translate[0] || + if (min_scale !== current_scale || x_translate !== current_translate[0] || y_translate !== current_translate[1]) { zoom_obj.translate([x_translate, y_translate]); - zoom_obj.scale(current_scale /*max_scale*/); + zoom_obj.scale(min_scale); zoom_obj.event(zoom_obj_element); - //update_view(false); // XXX should not need to update_view, just tick } } |
