From 69af9fc2219752ad7253cc4bf6e201d0cc9b84d3 Mon Sep 17 00:00:00 2001 From: "n.kudryavtsev" Date: Tue, 26 Mar 2019 18:49:44 +0300 Subject: [PATCH] Proposal: provide a possibility of passing custom zoom factor to renderer (not graphics) Before this proposal one could pass custom factor to 'graphics.scale' BUT calling this method directly causes: - no redendering; - no raising 'scale' event by renderer; - no changing 'transform.scale'. Of course these actions could be done later in third party code, but in this case it should just repeat the existing 'renderer.scale' method. It's better to allow developers not to do so. --- src/View/renderer.js | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/src/View/renderer.js b/src/View/renderer.js index 16a4eb6..b14e459 100644 --- a/src/View/renderer.js +++ b/src/View/renderer.js @@ -15,6 +15,9 @@ var timer = require('../Utils/timer.js'); var getDimension = require('../Utils/getDimensions.js'); var dragndrop = require('../Input/dragndrop.js'); +var zoomInFactor = Math.pow(1 + 0.4, 0.2); +var zoomOutFactor = Math.pow(1 + 0.4, -0.2); + /** * This is heart of the rendering. Class accepts graph to be rendered and rendering settings. * It monitors graph changes and depicts them accordingly. @@ -130,13 +133,15 @@ function renderer(graph, settings) { }, zoomOut: function() { - return scale(true); + return scale(zoomInFactor); }, zoomIn: function() { - return scale(false); + return scale(zoomOutFactor); }, + scale: scale, + /** * Returns current transformation matrix. */ @@ -421,7 +426,11 @@ function renderer(graph, settings) { graph.off('changed', onGraphChanged); } - function scale(out, scrollPoint) { + function scale(factor, scrollPoint) { + if (typeof factor !== 'number' || factor <= 0) { + return; + } + if (!scrollPoint) { var containerSize = getDimension(container); scrollPoint = { @@ -429,8 +438,8 @@ function renderer(graph, settings) { y: containerSize.height / 2 }; } - var scaleFactor = Math.pow(1 + 0.4, out ? -0.2 : 0.2); - transform.scale = graphics.scale(scaleFactor, scrollPoint); + + transform.scale = graphics.scale(factor, scrollPoint); renderGraph(); publicEvents.fire('scale', transform.scale);