From 6da41a3792fc10563393bbe09829881abcaa96df Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robert=20M=C3=B6stl?= Date: Mon, 30 Apr 2018 10:44:19 +0200 Subject: [PATCH 01/12] Implement more intuitive line shapes movement and resizing [2038] - Reason: until now line shapes were treated the same as rectangles and circles with the result that a line's start or end point couldn't be dragged freely but only in the quadrant where it was located. - Use of invisible helper elements to make grabbing a line and its ends easier. - Adapt shapes's Jasmine tests and add new ones. - Add an (editable) image test serving as an interactive testbed. --- src/components/shapes/draw.js | 138 ++++++++--- .../shapes_move-and-reshape-lines.png | Bin 0 -> 103109 bytes .../mocks/shapes_move-and-reshape-lines.json | 226 ++++++++++++++++++ test/jasmine/tests/shapes_test.js | 172 +++++++++++-- 4 files changed, 484 insertions(+), 52 deletions(-) create mode 100644 test/image/baselines/shapes_move-and-reshape-lines.png create mode 100644 test/image/mocks/shapes_move-and-reshape-lines.json diff --git a/src/components/shapes/draw.js b/src/components/shapes/draw.js index cd7bdf4acef..6958feb4785 100644 --- a/src/components/shapes/draw.js +++ b/src/components/shapes/draw.js @@ -118,26 +118,34 @@ function drawOne(gd, index) { null ); - if(gd._context.edits.shapePosition) setupDragElement(gd, path, options, index); + if(gd._context.edits.shapePosition) setupDragElement(gd, path, options, index, shapeLayer); } } -function setupDragElement(gd, shapePath, shapeOptions, index) { +function setupDragElement(gd, shapePath, shapeOptions, index, shapeLayer) { var MINWIDTH = 10, MINHEIGHT = 10; var xPixelSized = shapeOptions.xsizemode === 'pixel', - yPixelSized = shapeOptions.ysizemode === 'pixel'; + yPixelSized = shapeOptions.ysizemode === 'pixel', + isLine = shapeOptions.type === 'line'; var update; var x0, y0, x1, y1, xAnchor, yAnchor, astrX0, astrY0, astrX1, astrY1, astrXAnchor, astrYAnchor; var n0, s0, w0, e0, astrN, astrS, astrW, astrE, optN, optS, optW, optE; var pathIn, astrPath; - var xa, ya, x2p, y2p, p2x, p2y; + // setup conversion functions + var xa = Axes.getFromId(gd, shapeOptions.xref), + ya = Axes.getFromId(gd, shapeOptions.yref), + x2p = helpers.getDataToPixel(gd, xa), + y2p = helpers.getDataToPixel(gd, ya, true), + p2x = helpers.getPixelToData(gd, xa), + p2y = helpers.getPixelToData(gd, ya, true); + var sensoryElement = obtainSensoryElement(); var dragOptions = { - element: shapePath.node(), + element: sensoryElement.node(), gd: gd, prepFn: startDrag, doneFn: endDrag @@ -146,39 +154,90 @@ function setupDragElement(gd, shapePath, shapeOptions, index) { dragElement.init(dragOptions); - shapePath.node().onmousemove = updateDragMode; + sensoryElement.node().onmousemove = updateDragMode; - function updateDragMode(evt) { - // element might not be on screen at time of setup, - // so obtain bounding box here - var dragBBox = dragOptions.element.getBoundingClientRect(); - - // choose 'move' or 'resize' - // based on initial position of cursor within the drag element - var w = dragBBox.right - dragBBox.left, - h = dragBBox.bottom - dragBBox.top, - x = evt.clientX - dragBBox.left, - y = evt.clientY - dragBBox.top, - cursor = (w > MINWIDTH && h > MINHEIGHT && !evt.shiftKey) ? - dragElement.getCursor(x / w, 1 - y / h) : - 'move'; - - setCursor(shapePath, cursor); - - // possible values 'move', 'sw', 'w', 'se', 'e', 'ne', 'n', 'nw' and 'w' - dragMode = cursor.split('-')[0]; + function obtainSensoryElement() { + return isLine ? createLineDragHandles() : shapePath; } - function startDrag(evt) { - // setup conversion functions - xa = Axes.getFromId(gd, shapeOptions.xref); - ya = Axes.getFromId(gd, shapeOptions.yref); + function createLineDragHandles() { + var minSensoryWidth = 10, + sensoryWidth = Math.max(shapeOptions.line.width, minSensoryWidth); + + // Helper shapes group + // Note that by setting the `data-index` attr, it is ensured that + // the helper group is purged in this modules `draw` function + var g = shapeLayer.append('g') + .attr('data-index', index); + + // Helper path for moving + g.append('path') + .attr('d', shapePath.attr('d')) + .style({ + 'cursor': 'move', + 'stroke-width': sensoryWidth, + 'stroke-opacity': '0' // ensure not visible + }); + + // Helper circles for resizing + var circleStyle = { + 'cursor': 'default', + 'fill-opacity': '0' // ensure not visible + }; + var circleRadius = sensoryWidth / 2 > minSensoryWidth ? sensoryWidth / 2 : minSensoryWidth; + + g.append('circle') + .attr({ + 'data-line-point': 'start-point', + 'cx': xPixelSized ? x2p(shapeOptions.xanchor) + shapeOptions.x0 : x2p(shapeOptions.x0), + 'cy': yPixelSized ? y2p(shapeOptions.yanchor) - shapeOptions.y0 : y2p(shapeOptions.y0), + 'r': circleRadius + }) + .style(circleStyle); + + g.append('circle') + .attr({ + 'data-line-point': 'end-point', + 'cx': xPixelSized ? x2p(shapeOptions.xanchor) + shapeOptions.x1 : x2p(shapeOptions.x1), + 'cy': yPixelSized ? y2p(shapeOptions.yanchor) - shapeOptions.y1 : y2p(shapeOptions.y1), + 'r': circleRadius + }) + .style(circleStyle); + + return g; + } - x2p = helpers.getDataToPixel(gd, xa); - y2p = helpers.getDataToPixel(gd, ya, true); - p2x = helpers.getPixelToData(gd, xa); - p2y = helpers.getPixelToData(gd, ya, true); + function updateDragMode(evt) { + if(isLine) { + if(evt.target.tagName === 'path') { + dragMode = 'move'; + } else { + dragMode = evt.target.attributes['data-line-point'].value === 'start-point' ? + 'resize-over-start-point' : 'resize-over-end-point'; + } + } else { + // element might not be on screen at time of setup, + // so obtain bounding box here + var dragBBox = dragOptions.element.getBoundingClientRect(); + + // choose 'move' or 'resize' + // based on initial position of cursor within the drag element + var w = dragBBox.right - dragBBox.left, + h = dragBBox.bottom - dragBBox.top, + x = evt.clientX - dragBBox.left, + y = evt.clientY - dragBBox.top, + cursor = (w > MINWIDTH && h > MINHEIGHT && !evt.shiftKey) ? + dragElement.getCursor(x / w, 1 - y / h) : + 'move'; + + setCursor(shapePath, cursor); + + // possible values 'move', 'sw', 'w', 'se', 'e', 'ne', 'n', 'nw' and 'w' + dragMode = cursor.split('-')[0]; + } + } + function startDrag(evt) { // setup update strings and initial values var astr = 'shapes[' + index + ']'; @@ -305,6 +364,19 @@ function setupDragElement(gd, shapePath, shapeOptions, index) { shapeOptions.path = movePath(pathIn, moveX, moveY); update[astrPath] = shapeOptions.path; } + else if(isLine) { + if(dragMode === 'resize-over-start-point') { + var newX0 = x0 + dx; + var newY0 = yPixelSized ? y0 - dy : y0 + dy; + update[astrX0] = shapeOptions.x0 = xPixelSized ? newX0 : p2x(newX0); + update[astrY0] = shapeOptions.y0 = yPixelSized ? newY0 : p2y(newY0); + } else if(dragMode === 'resize-over-end-point') { + var newX1 = x1 + dx; + var newY1 = yPixelSized ? y1 - dy : y1 + dy; + update[astrX1] = shapeOptions.x1 = xPixelSized ? newX1 : p2x(newX1); + update[astrY1] = shapeOptions.y1 = yPixelSized ? newY1 : p2y(newY1); + } + } else { var newN = (~dragMode.indexOf('n')) ? n0 + dy : n0, newS = (~dragMode.indexOf('s')) ? s0 + dy : s0, diff --git a/test/image/baselines/shapes_move-and-reshape-lines.png b/test/image/baselines/shapes_move-and-reshape-lines.png new file mode 100644 index 0000000000000000000000000000000000000000..a3238a2433e1ae71a5e7118e5ad19287955581d3 GIT binary patch literal 103109 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 literal 0 HcmV?d00001 diff --git a/test/image/mocks/shapes_move-and-reshape-lines.json b/test/image/mocks/shapes_move-and-reshape-lines.json new file mode 100644 index 00000000000..cbc94d1c29a --- /dev/null +++ b/test/image/mocks/shapes_move-and-reshape-lines.json @@ -0,0 +1,226 @@ +{ + "data": [ + { + "x": [1], + "y": [1] + }, + { + "x": [1,3,4], + "y": ["Giraffes","Apes","Zebras"], + "xaxis": "x2", + "yaxis": "y2" + } + ], + "layout": { + "title": "Editable line shapes", + "autosize": false, + "width": 1000, + "height": 800, + "xaxis": { + "domain": [0,0.45], + "anchor": "y" + }, + "yaxis": { + "domain": [0.55,0.92], + "type": "log", + "anchor": "x" + }, + "xaxis2": { + "domain":[0.50,0.95], + "anchor": "y2" + }, + "yaxis2": { + "domain": [0.55,0.92], + "type": "categorical", + "anchor": "x2" + }, + "xaxis3": { + "domain":[0,0.45], + "range": ["2018-04-01", "2018-04-30"], + "type": "date", + "anchor": "y3" + }, + "yaxis3": { + "domain": [0,0.37], + "anchor": "x3" + }, + "xaxis4": { + "domain": [0.50,0.95], + "anchor": "y4" + }, + "yaxis4": { + "domain": [0,0.37], + "type": "linear", + "anchor": "x4" + }, + "annotations": [ + { + "text": "Fixed and log scaled", "xref": "paper", "yref": "paper", "x": 0, "y": 1, + "xanchor": "left", "showarrow": false, "font": {"size": 24} + }, + { + "text": "Fixed and categorical scaled", "xref": "paper", "yref": "paper", "x": 0.5, "y": 1, + "xanchor": "left", "showarrow": false, "font": {"size": 24} + }, + { + "text": "Fixed and date scaled", "xref": "paper", "yref": "paper", "x": 0, "y": 0.42, + "xanchor": "left", "showarrow": false, "font": {"size": 24} + }, + { + "text": "Thick lines shapes", "xref": "paper", "yref": "paper", "x": 0.5, "y": 0.42, + "xanchor": "left", "showarrow": false, "font": {"size": 24} + }, + { + "text": "Green is fixed size", "xref": "x4", "yref": "y4", "x": 1, "y": 2, + "showarrow": true, "font": {"size": 14, "color": "rgba(96, 171, 50, 1)"} + }, + { + "text": "Violet is data scaled", "xref": "x4", "yref": "y4", "x": 2.1, "y": 2.1, + "showarrow": true, "font": {"size": 14, "color": "rgba(96, 50, 171, 1)"}, + "ax": 40 + }, + { + "text": "Brown is paper scaled", "xref": "paper", "yref": "paper", "x": 0.9, "y": 0.9, + "showarrow": true, "font": {"size": 14, "color": "rgba(171, 96, 50, 1)"}, + "ax": 40, "ay": 50 + } + ], + "shapes": [ + { + "type": "line", + "xref": "x", + "xsizemode": "pixel", + "yref": "y", + "ysizemode": "pixel", + "xanchor": 0, + "yanchor": 2, + "x0": 0, + "x1": 60, + "y0": 0, + "y1": 40, + "line": { + "color": "rgba(96, 171, 50, 1)" + } + }, + { + "type": "line", + "xref": "x", + "yref": "y", + "x0": 0, + "x1": 4, + "y0": 1, + "y1": 10, + "line": { + "color": "rgba(96, 50, 171, 1)" + } + }, + { + "type": "line", + "xref": "x2", + "xsizemode": "pixel", + "yref": "y2", + "ysizemode": "pixel", + "xanchor": 2, + "yanchor": 2, + "x0": 0, + "x1": 60, + "y0": 0, + "y1": 40, + "line": { + "color": "rgba(96, 171, 50, 1)" + } + }, + { + "type": "line", + "xref": "x2", + "xsizemode": "scaled", + "yref": "y2", + "ysizemode": "scaled", + "x0": 0, + "x1": 5, + "y0": "Zebras", + "y1": "Apes", + "line": { + "color": "rgba(96, 50, 171, 1)" + } + }, + { + "type": "line", + "xref": "x3", + "xsizemode": "pixel", + "yref": "y3", + "ysizemode": "pixel", + "xanchor": "2018-04-15", + "yanchor": 2, + "x0": 0, + "x1": 60, + "y0": 0, + "y1": 40, + "line": { + "color": "rgba(96, 171, 50, 1)" + } + }, + { + "type": "line", + "xref": "x3", + "xsizemode": "scaled", + "yref": "y3", + "ysizemode": "scaled", + "x0": "2018-04-05", + "x1": "2018-04-20", + "y0": 0, + "y1": 40, + "line": { + "color": "rgba(96, 50, 171, 1)" + } + }, + { + "type": "line", + "xref": "x4", + "xsizemode": "pixel", + "yref": "y4", + "ysizemode": "pixel", + "xanchor": 1, + "yanchor": 2, + "x0": 0, + "x1": 120, + "y0": 0, + "y1": -40, + "line": { + "color": "rgba(96, 171, 50, 1)", + "width": 30 + } + }, + { + "type": "line", + "xref": "x4", + "xsizemode": "scaled", + "yref": "y4", + "ysizemode": "scaled", + "x0": 1, + "x1": 3, + "y0": 3, + "y1": 1, + "line": { + "color": "rgba(96, 50, 171, 1)", + "width": 30 + } + }, + { + "type": "line", + "xref": "paper", + "yref": "paper", + "x0": 0, + "y0": 0, + "x1": 1, + "y1": 1, + "line": { + "color": "rgba(171, 96, 50, 1)" + } + } + ] + }, + "config": { + "editable": "true" + } +} diff --git a/test/jasmine/tests/shapes_test.js b/test/jasmine/tests/shapes_test.js index 7463db6f01d..66aa2c53dc6 100644 --- a/test/jasmine/tests/shapes_test.js +++ b/test/jasmine/tests/shapes_test.js @@ -30,6 +30,22 @@ var dyToShrinkHeight = { n: 10, s: -10, w: 0, e: 0, nw: 10, se: -10, ne: 10, sw: var dxToEnlargeWidth = { n: 0, s: 0, w: -10, e: 10, nw: -10, se: 10, ne: 10, sw: -10 }; var dyToEnlargeHeight = { n: -10, s: 10, w: 0, e: 0, nw: -10, se: 10, ne: -10, sw: 10 }; +// Helper functions +function getMoveLineDragElement(index) { + index = index || 0; + return d3.selectAll('.shapelayer g[data-index="' + index + '"] path').node(); +} + +function getResizeLineOverStartPointElement(index) { + index = index || 0; + return d3.selectAll('.shapelayer g[data-index="' + index + '"] circle[data-line-point="start-point"]').node(); +} + +function getResizeLineOverEndPointElement(index) { + index = index || 0; + return d3.selectAll('.shapelayer g[data-index="' + index + '"] circle[data-line-point="end-point"]').node(); +} + describe('Test shapes defaults:', function() { 'use strict'; @@ -1024,7 +1040,9 @@ describe('A fixed size shape', function() { return combinations; } - var shapeAndResizeTypes = combinations(shapeTypes, resizeTypes); + // Only rect and circle because (i) path isn't yet resizable + // and (ii) line has a different resize behavior. + var shapeAndResizeTypes = combinations([{type: 'rect'}, {type: 'circle'}], resizeTypes); shapeAndResizeTypes.forEach(function(testCase) { describe('@flaky of type ' + testCase.type + ' can be ' + testCase.resizeDisplayName, function() { resizeDirections.forEach(function(direction) { @@ -1056,6 +1074,81 @@ describe('A fixed size shape', function() { }); }); + describe('@flaky of type line', function() { + beforeEach(function() { + layout.shapes[0].type = 'line'; + layout.shapes[0].yanchor = 3; + + }); + + it('can be moved by dragging the middle', function(done) { + Plotly.plot(gd, data, layout, {editable: true}) + .then(function() { + var shapeNodeBeforeDrag = getFirstShapeNode(); + var bBoxBeforeDrag = shapeNodeBeforeDrag.getBoundingClientRect(); + + var dragSensitiveElement = getMoveLineDragElement(0); + drag(dragSensitiveElement, 10, -10) + .then(function() { + var shapeNodeAfterDrag = getFirstShapeNode(); + var bBoxAfterDrag = shapeNodeAfterDrag.getBoundingClientRect(); + + assertShapeSize(shapeNodeAfterDrag, 25, 25); + expect(bBoxAfterDrag.left).toBe(bBoxBeforeDrag.left + 10); + expect(bBoxAfterDrag.top).toBe(bBoxBeforeDrag.top - 10); + + done(); + }); + }); + }); + + it('can be resized by dragging the start point', function(done) { + Plotly.plot(gd, data, layout, {editable: true}) + .then(function() { + var shapeNodeBeforeDrag = getFirstShapeNode(); + var bBoxBeforeDrag = shapeNodeBeforeDrag.getBoundingClientRect(); + + var dragSensitiveElement = getResizeLineOverStartPointElement(); + drag(dragSensitiveElement, 50, -10) + .then(function() { + var shapeNodeAfterDrag = getFirstShapeNode(); + var bBoxAfterDrag = shapeNodeAfterDrag.getBoundingClientRect(); + + assertShapeSize(shapeNodeAfterDrag, 25, 35); + expect(bBoxAfterDrag.top).toBe(bBoxBeforeDrag.top - 10, 'top'); + expect(bBoxAfterDrag.right).toBe(bBoxBeforeDrag.right + 25, 'right'); + expect(bBoxAfterDrag.bottom).toBe(bBoxBeforeDrag.bottom, 'bottom'); + expect(bBoxAfterDrag.left).toBe(bBoxBeforeDrag.left + 25, 'left'); + + done(); + }); + }); + }); + + it('can be resized by dragging the end point', function(done) { + Plotly.plot(gd, data, layout, {editable: true}) + .then(function() { + var shapeNodeBeforeDrag = getFirstShapeNode(); + var bBoxBeforeDrag = shapeNodeBeforeDrag.getBoundingClientRect(); + + var dragSensitiveElement = getResizeLineOverEndPointElement(); + drag(dragSensitiveElement, 50, -10) + .then(function() { + var shapeNodeAfterDrag = getFirstShapeNode(); + var bBoxAfterDrag = shapeNodeAfterDrag.getBoundingClientRect(); + + assertShapeSize(shapeNodeAfterDrag, 75, 15); + expect(bBoxAfterDrag.top).toBe(bBoxBeforeDrag.top, 'top'); + expect(bBoxAfterDrag.right).toBe(bBoxBeforeDrag.right + 50, 'right'); + expect(bBoxAfterDrag.bottom).toBe(bBoxBeforeDrag.bottom - 10, 'bottom'); + expect(bBoxAfterDrag.left).toBe(bBoxBeforeDrag.left, 'left'); + + done(); + }); + }); + }); + }); + describe('is expanding an auto-ranging x-axis', function() { var sizeVariants = [ {x0: 5, x1: 25}, @@ -1187,8 +1280,8 @@ describe('@flaky Test shapes', function() { ]; testCases.forEach(function(testCase) { - it(testCase.title + 'should be draggable', function(done) { - setupLayout(testCase); + it(testCase.title + ' should be draggable', function(done) { + setupLayout(testCase, [{type: 'line'}, {type: 'rect'}, {type: 'circle'}, {type: 'path'}]); testDragEachShape(done); }); }); @@ -1196,16 +1289,28 @@ describe('@flaky Test shapes', function() { testCases.forEach(function(testCase) { resizeDirections.forEach(function(direction) { var testTitle = testCase.title + - 'should be resizeable over direction ' + + ' should be resizeable over direction ' + direction; it(testTitle, function(done) { - setupLayout(testCase); + // Exclude line because it has a different resize behavior + setupLayout(testCase, [{type: 'rect'}, {type: 'circle'}, {type: 'path'}]); testResizeEachShape(direction, done); }); }); }); - function setupLayout(testCase) { + testCases.forEach(function(testCase) { + ['start', 'end'].forEach(function(linePoint) { + var testTitle = 'Line shape ' + testCase.title + + ' should be resizable by dragging the ' + linePoint + ' point'; + it(testTitle, function(done) { + setupLayout(testCase, [{type: 'line'}]); + testLineResize(linePoint, done); + }); + }); + }); + + function setupLayout(testCase, layoutShapes) { Lib.extendDeep(layout, testCase); var xrange = testCase.xaxis ? testCase.xaxis.range : [0.25, 0.75], @@ -1241,26 +1346,19 @@ describe('@flaky Test shapes', function() { x1y1 = x1 + ',' + y1, x1y0 = x1 + ',' + y0; - var layoutShapes = [ - { type: 'line' }, - { type: 'rect' }, - { type: 'circle' }, - {} // path - ]; - layoutShapes.forEach(function(s) { s.xref = xref; s.yref = yref; - if(s.type) { + if(s.type === 'path') { + s.path = 'M' + x0y0 + 'L' + x1y1 + 'L' + x1y0 + 'Z'; + } + else { s.x0 = x0; s.x1 = x1; s.y0 = y0; s.y1 = y1; } - else { - s.path = 'M' + x0y0 + 'L' + x1y1 + 'L' + x1y0 + 'Z'; - } }); layout.shapes = layoutShapes; @@ -1277,7 +1375,9 @@ describe('@flaky Test shapes', function() { var dx = 100, dy = 100; promise = promise.then(function() { - var node = getShapeNode(index); + var node = layoutShape.type === 'line' ? + getMoveLineDragElement(index) : + getShapeNode(index); expect(node).not.toBe(null); return (layoutShape.path) ? @@ -1294,7 +1394,9 @@ describe('@flaky Test shapes', function() { var layoutShapes = gd.layout.shapes; - expect(layoutShapes.length).toBe(4); // line, rect, circle and path + // Only rect, circle and path. + // Hint: line has different resize behavior. + expect(layoutShapes.length).toBe(3); layoutShapes.forEach(function(layoutShape, index) { if(layoutShape.path) return; @@ -1431,6 +1533,38 @@ describe('@flaky Test shapes', function() { }); } + function testLineResize(pointToMove, done) { + var promise = Plotly.plot(gd, data, layout, config); + var layoutShape = gd.layout.shapes[0]; + + var xa = Axes.getFromId(gd, layoutShape.xref), + ya = Axes.getFromId(gd, layoutShape.yref), + x2p = helpers.getDataToPixel(gd, xa), + y2p = helpers.getDataToPixel(gd, ya, true); + + + promise = promise.then(function() { + var dragHandle = pointToMove === 'start' ? + getResizeLineOverStartPointElement() : + getResizeLineOverEndPointElement(); + + var initialCoordinates = getShapeCoordinates(layoutShape, x2p, y2p); + return drag(dragHandle, 10, 10).then(function() { + var finalCoordinates = getShapeCoordinates(layoutShape, x2p, y2p); + + if(pointToMove === 'start') { + expect(finalCoordinates.x0 - initialCoordinates.x0).toBeCloseTo(10); + expect(finalCoordinates.y0 - initialCoordinates.y0).toBeCloseTo(10); + } else { + expect(finalCoordinates.x1 - initialCoordinates.x1).toBeCloseTo(10); + expect(finalCoordinates.y1 - initialCoordinates.y1).toBeCloseTo(10); + } + }); + }); + + return promise.then(done); + } + function getPathCoordinates(pathString, x2p, y2p) { var coordinates = []; From 88d959d878e32c3f6fb83112edde1851debede9c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robert=20M=C3=B6stl?= Date: Mon, 30 Apr 2018 16:23:09 +0200 Subject: [PATCH 02/12] Rename image test 'fixed_size_shapes' to 'shapes_fixed_size' - Reason: to better fit the de-facto naming convention for image tests which is starting with the plot type. --- ...{fixed_size_shapes.png => shapes_fixed_size.png} | Bin ...ixed_size_shapes.json => shapes_fixed_size.json} | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename test/image/baselines/{fixed_size_shapes.png => shapes_fixed_size.png} (100%) rename test/image/mocks/{fixed_size_shapes.json => shapes_fixed_size.json} (100%) diff --git a/test/image/baselines/fixed_size_shapes.png b/test/image/baselines/shapes_fixed_size.png similarity index 100% rename from test/image/baselines/fixed_size_shapes.png rename to test/image/baselines/shapes_fixed_size.png diff --git a/test/image/mocks/fixed_size_shapes.json b/test/image/mocks/shapes_fixed_size.json similarity index 100% rename from test/image/mocks/fixed_size_shapes.json rename to test/image/mocks/shapes_fixed_size.json From dffe3089dd9594e6b6cc6340900c8b6da8695bd3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robert=20M=C3=B6stl?= Date: Wed, 2 May 2018 11:28:02 +0200 Subject: [PATCH 03/12] Use 'grab' cursor when moving either end of a line shape [2038] --- build/plotcss.js | 1 + src/components/shapes/draw.js | 7 ++++--- src/css/_cursor.scss | 4 ++++ 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/build/plotcss.js b/build/plotcss.js index c3984376e12..459d89d47bd 100644 --- a/build/plotcss.js +++ b/build/plotcss.js @@ -30,6 +30,7 @@ var rules = { "X .cursor-nw-resize": "cursor:nw-resize;", "X .cursor-n-resize": "cursor:n-resize;", "X .cursor-ne-resize": "cursor:ne-resize;", + "X .cursor-grab": "cursor:-webkit-grab;cursor:grab;", "X .modebar": "position:absolute;top:2px;right:2px;z-index:1001;background:rgba(255,255,255,0.7);", "X .modebar--hover": "opacity:0;-webkit-transition:opacity 0.3s ease 0s;-moz-transition:opacity 0.3s ease 0s;-ms-transition:opacity 0.3s ease 0s;-o-transition:opacity 0.3s ease 0s;transition:opacity 0.3s ease 0s;", "X:hover .modebar--hover": "opacity:1;", diff --git a/src/components/shapes/draw.js b/src/components/shapes/draw.js index 6958feb4785..91e2c7c4ef6 100644 --- a/src/components/shapes/draw.js +++ b/src/components/shapes/draw.js @@ -181,7 +181,6 @@ function setupDragElement(gd, shapePath, shapeOptions, index, shapeLayer) { // Helper circles for resizing var circleStyle = { - 'cursor': 'default', 'fill-opacity': '0' // ensure not visible }; var circleRadius = sensoryWidth / 2 > minSensoryWidth ? sensoryWidth / 2 : minSensoryWidth; @@ -193,7 +192,8 @@ function setupDragElement(gd, shapePath, shapeOptions, index, shapeLayer) { 'cy': yPixelSized ? y2p(shapeOptions.yanchor) - shapeOptions.y0 : y2p(shapeOptions.y0), 'r': circleRadius }) - .style(circleStyle); + .style(circleStyle) + .classed('cursor-grab', true); g.append('circle') .attr({ @@ -202,7 +202,8 @@ function setupDragElement(gd, shapePath, shapeOptions, index, shapeLayer) { 'cy': yPixelSized ? y2p(shapeOptions.yanchor) - shapeOptions.y1 : y2p(shapeOptions.y1), 'r': circleRadius }) - .style(circleStyle); + .style(circleStyle) + .classed('cursor-grab', true); return g; } diff --git a/src/css/_cursor.scss b/src/css/_cursor.scss index 6ebe9984aa8..5b874ea0220 100644 --- a/src/css/_cursor.scss +++ b/src/css/_cursor.scss @@ -14,3 +14,7 @@ .cursor-nw-resize { cursor: nw-resize; } .cursor-n-resize { cursor: n-resize; } .cursor-ne-resize { cursor: ne-resize; } +.cursor-grab { + cursor: -webkit-grab; // For Chrome + cursor: grab; +} \ No newline at end of file From 1b9bb8a5e5d860230822eac0b101af5f88f1932a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robert=20M=C3=B6stl?= Date: Wed, 2 May 2018 11:51:23 +0200 Subject: [PATCH 04/12] Adapt cursors for annotation interactions - Reason: in conjunction with moving shapes [2038], to get a more consistent cursor behavior for movable elements. Use 'move' cursor for movable annotation arrows - Reason: in conjunction with moving shapes [2038], to get a more consistent cursor behavior for movable elements. --- src/components/annotations/draw.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/components/annotations/draw.js b/src/components/annotations/draw.js index d5b2ce2e287..3dd8bd166ce 100644 --- a/src/components/annotations/draw.js +++ b/src/components/annotations/draw.js @@ -132,7 +132,7 @@ function drawRaw(gd, options, index, subplotId, xa, ya) { var annTextGroupInner = annTextGroup.append('g') .style('pointer-events', textEvents ? 'all' : null) - .call(setCursor, 'default') + .call(setCursor, 'pointer') .on('click', function() { gd._dragging = false; @@ -533,6 +533,7 @@ function drawRaw(gd, options, index, subplotId, xa, ya) { var arrowDrag = arrowGroup.append('path') .classed('annotation-arrow', true) .classed('anndrag', true) + .classed('cursor-move', true) .attr({ d: 'M3,3H-3V-3H3ZM0,0L' + (tailX - arrowDragHeadX) + ',' + (tailY - arrowDragHeadY), transform: 'translate(' + arrowDragHeadX + ',' + arrowDragHeadY + ')' From 772913312f2d790ae827411fe21a446cb785616c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robert=20M=C3=B6stl?= Date: Wed, 2 May 2018 16:01:29 +0200 Subject: [PATCH 05/12] Deactivate clip path temporarily while dragging shapes [2038] - Hint: only deactivate for auto-ranged axes. - Reason: to allow for more accuracy when dragging shapes outside of the plot's bounds. --- src/components/shapes/draw.js | 42 +++++++++++++++++++++++++++-------- 1 file changed, 33 insertions(+), 9 deletions(-) diff --git a/src/components/shapes/draw.js b/src/components/shapes/draw.js index 91e2c7c4ef6..149422671e8 100644 --- a/src/components/shapes/draw.js +++ b/src/components/shapes/draw.js @@ -108,20 +108,24 @@ function drawOne(gd, index) { .call(Color.fill, options.fillcolor) .call(Drawing.dashLine, options.line.dash, options.line.width); - // note that for layer="below" the clipAxes can be different from the - // subplot we're drawing this in. This could cause problems if the shape - // spans two subplots. See https://github.com/plotly/plotly.js/issues/1452 - var clipAxes = (options.xref + options.yref).replace(/paper/g, ''); - - path.call(Drawing.setClipUrl, clipAxes ? - ('clip' + gd._fullLayout._uid + clipAxes) : - null - ); + setClipPath(path, gd, options); if(gd._context.edits.shapePosition) setupDragElement(gd, path, options, index, shapeLayer); } } +function setClipPath(shapePath, gd, shapeOptions) { + // note that for layer="below" the clipAxes can be different from the + // subplot we're drawing this in. This could cause problems if the shape + // spans two subplots. See https://github.com/plotly/plotly.js/issues/1452 + var clipAxes = (shapeOptions.xref + shapeOptions.yref).replace(/paper/g, ''); + + shapePath.call(Drawing.setClipUrl, clipAxes ? + ('clip' + gd._fullLayout._uid + clipAxes) : + null + ); +} + function setupDragElement(gd, shapePath, shapeOptions, index, shapeLayer) { var MINWIDTH = 10, MINHEIGHT = 10; @@ -291,11 +295,15 @@ function setupDragElement(gd, shapePath, shapeOptions, index, shapeLayer) { // setup dragMode and the corresponding handler updateDragMode(evt); + deactivateClipPathTemporarily(shapePath, shapeOptions, gd); dragOptions.moveFn = (dragMode === 'move') ? moveShape : resizeShape; } function endDrag() { setCursor(shapePath); + + // Don't rely on clipPath being activated during re-layout + setClipPath(shapePath, gd, shapeOptions); Registry.call('relayout', gd, update); } @@ -404,6 +412,22 @@ function setupDragElement(gd, shapePath, shapeOptions, index, shapeLayer) { shapePath.attr('d', getPathString(gd, shapeOptions)); } + + function deactivateClipPathTemporarily(shapePath, shapeOptions, gd) { + var xref = shapeOptions.xref, + yref = shapeOptions.yref, + xa = Axes.getFromId(gd, xref), + ya = Axes.getFromId(gd, yref); + + var clipAxes = ''; + if(xref !== 'paper' && !xa.autorange) clipAxes += xref; + if(yref !== 'paper' && !ya.autorange) clipAxes += yref; + + shapePath.call(Drawing.setClipUrl, clipAxes ? + 'clip' + gd._fullLayout._uid + clipAxes : + null + ); + } } function getPathString(gd, options) { From 116d53fda89d0c81671a1837207251ca1c5b4b91 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robert=20M=C3=B6stl?= Date: Wed, 2 May 2018 21:00:29 +0200 Subject: [PATCH 06/12] Fix typo in shapes_move-and-reshape-lines.json image test [2038] --- test/image/mocks/shapes_move-and-reshape-lines.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/image/mocks/shapes_move-and-reshape-lines.json b/test/image/mocks/shapes_move-and-reshape-lines.json index cbc94d1c29a..5d18a389ad7 100644 --- a/test/image/mocks/shapes_move-and-reshape-lines.json +++ b/test/image/mocks/shapes_move-and-reshape-lines.json @@ -67,7 +67,7 @@ "xanchor": "left", "showarrow": false, "font": {"size": 24} }, { - "text": "Thick lines shapes", "xref": "paper", "yref": "paper", "x": 0.5, "y": 0.42, + "text": "Thick line shapes", "xref": "paper", "yref": "paper", "x": 0.5, "y": 0.42, "xanchor": "left", "showarrow": false, "font": {"size": 24} }, { From 014fa99d31e47a37b93896685371a8dae78b52cf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robert=20M=C3=B6stl?= Date: Wed, 2 May 2018 20:54:44 +0200 Subject: [PATCH 07/12] Render anchor point when moving a pixel sized shape [2038] - Reason: resizing a pixel sized shape is changing the distance to its anchor point. The anchor point not being visible caused misleading perceptions in case of auto-ranged axis because the auto-range algorithm takes both anchor point and pixel coordinates of shape into account. - Even works for `path` shapes and shapes where only one dimension is pixel sized. --- src/components/shapes/calc_autorange.js | 19 +-------- src/components/shapes/draw.js | 56 ++++++++++++++++++++++++- src/components/shapes/helpers.js | 19 +++++++++ 3 files changed, 75 insertions(+), 19 deletions(-) diff --git a/src/components/shapes/calc_autorange.js b/src/components/shapes/calc_autorange.js index 06c599255eb..967cbcc4992 100644 --- a/src/components/shapes/calc_autorange.js +++ b/src/components/shapes/calc_autorange.js @@ -62,7 +62,7 @@ function calcPaddingOptions(lineWidth, sizeMode, v0, v1, path, isYAxis) { if(sizeMode === 'pixel') { var coords = path ? - extractPathCoords(path, isYAxis ? constants.paramIsY : constants.paramIsX) : + helpers.extractPathCoords(path, isYAxis ? constants.paramIsY : constants.paramIsX) : [v0, v1]; var maxValue = Lib.aggNums(Math.max, null, coords), minValue = Lib.aggNums(Math.min, null, coords), @@ -79,23 +79,6 @@ function calcPaddingOptions(lineWidth, sizeMode, v0, v1, path, isYAxis) { } } -function extractPathCoords(path, paramsToUse) { - var extractedCoordinates = []; - - var segments = path.match(constants.segmentRE); - segments.forEach(function(segment) { - var relevantParamIdx = paramsToUse[segment.charAt(0)].drawn; - if(relevantParamIdx === undefined) return; - - var params = segment.substr(1).match(constants.paramRE); - if(!params || params.length < relevantParamIdx) return; - - extractedCoordinates.push(params[relevantParamIdx]); - }); - - return extractedCoordinates; -} - function shapeBounds(ax, v0, v1, path, paramsToUse) { var convertVal = (ax.type === 'category') ? ax.r2c : ax.d2c; diff --git a/src/components/shapes/draw.js b/src/components/shapes/draw.js index 149422671e8..cb1e59de932 100644 --- a/src/components/shapes/draw.js +++ b/src/components/shapes/draw.js @@ -152,7 +152,8 @@ function setupDragElement(gd, shapePath, shapeOptions, index, shapeLayer) { element: sensoryElement.node(), gd: gd, prepFn: startDrag, - doneFn: endDrag + doneFn: endDrag, + clickFn: abortDrag }, dragMode; @@ -295,18 +296,24 @@ function setupDragElement(gd, shapePath, shapeOptions, index, shapeLayer) { // setup dragMode and the corresponding handler updateDragMode(evt); + renderVisualCues(shapeLayer, shapeOptions); deactivateClipPathTemporarily(shapePath, shapeOptions, gd); dragOptions.moveFn = (dragMode === 'move') ? moveShape : resizeShape; } function endDrag() { setCursor(shapePath); + removeVisualCues(shapeLayer); // Don't rely on clipPath being activated during re-layout setClipPath(shapePath, gd, shapeOptions); Registry.call('relayout', gd, update); } + function abortDrag() { + removeVisualCues(shapeLayer); + } + function moveShape(dx, dy) { if(shapeOptions.type === 'path') { var noOp = function(coord) { return coord; }, @@ -347,6 +354,7 @@ function setupDragElement(gd, shapePath, shapeOptions, index, shapeLayer) { } shapePath.attr('d', getPathString(gd, shapeOptions)); + renderVisualCues(shapeLayer, shapeOptions); } function resizeShape(dx, dy) { @@ -411,6 +419,52 @@ function setupDragElement(gd, shapePath, shapeOptions, index, shapeLayer) { } shapePath.attr('d', getPathString(gd, shapeOptions)); + renderVisualCues(shapeLayer, shapeOptions); + } + + function renderVisualCues(shapeLayer, shapeOptions) { + if(xPixelSized || yPixelSized) { + renderAnchor(); + } + + function renderAnchor() { + var isNotPath = shapeOptions.type !== 'path'; + + // d3 join with dummy data to satisfy d3 data-binding + var visualCues = shapeLayer.selectAll('.visual-cue').data([0]); + + // Enter + visualCues.enter() + .append('path') + .attr({ + 'fill': '#fff', + 'fill-rule': 'evenodd', + 'stroke': '#000', + 'stroke-width': 1 + }) + .classed('visual-cue', true); + + // Update + var anchorX = x2p(xPixelSized ? + shapeOptions.xanchor : + isNotPath ? + shapeOptions.x0 : + helpers.extractPathCoords(shapeOptions.path, constants.paramIsX)[0]); + var anchorY = y2p(yPixelSized ? + shapeOptions.yanchor : + isNotPath ? + shapeOptions.y0 : + helpers.extractPathCoords(shapeOptions.path, constants.paramIsY)[0]); + + var crossHairPath = 'M' + (anchorX - 1) + ',' + (anchorY - 1) + + 'l-8,0 l0,-2 l8,0 l0,-8 l2,0 l0,8 l8,0 l0,2 l-8,0 l0,8 l-2,0 Z'; + + visualCues.attr('d', crossHairPath); + } + } + + function removeVisualCues(shapeLayer) { + shapeLayer.selectAll('.visual-cue').remove(); } function deactivateClipPathTemporarily(shapePath, shapeOptions, gd) { diff --git a/src/components/shapes/helpers.js b/src/components/shapes/helpers.js index c0b27149f11..065e14f31f1 100644 --- a/src/components/shapes/helpers.js +++ b/src/components/shapes/helpers.js @@ -9,6 +9,8 @@ 'use strict'; +var constants = require('./constants'); + // special position conversion functions... category axis positions can't be // specified by their data values, because they don't make a continuous mapping. // so these have to be specified in terms of the category serial numbers, @@ -37,6 +39,23 @@ exports.encodeDate = function(convertToDate) { return function(v) { return convertToDate(v).replace(' ', '_'); }; }; +exports.extractPathCoords = function(path, paramsToUse) { + var extractedCoordinates = []; + + var segments = path.match(constants.segmentRE); + segments.forEach(function(segment) { + var relevantParamIdx = paramsToUse[segment.charAt(0)].drawn; + if(relevantParamIdx === undefined) return; + + var params = segment.substr(1).match(constants.paramRE); + if(!params || params.length < relevantParamIdx) return; + + extractedCoordinates.push(params[relevantParamIdx]); + }); + + return extractedCoordinates; +}; + exports.getDataToPixel = function(gd, axis, isVertical) { var gs = gd._fullLayout._size, dataToPixel; From ae46cea81ffb377d7e1d11239fadc306dd9fde2d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robert=20M=C3=B6stl?= Date: Wed, 2 May 2018 21:41:27 +0200 Subject: [PATCH 08/12] Disable resize cursors for path shapes - Reason: resize cursors were shown although resizing path shapes is not yet supported. --- src/components/shapes/draw.js | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/components/shapes/draw.js b/src/components/shapes/draw.js index cb1e59de932..14d45385071 100644 --- a/src/components/shapes/draw.js +++ b/src/components/shapes/draw.js @@ -132,7 +132,8 @@ function setupDragElement(gd, shapePath, shapeOptions, index, shapeLayer) { var xPixelSized = shapeOptions.xsizemode === 'pixel', yPixelSized = shapeOptions.ysizemode === 'pixel', - isLine = shapeOptions.type === 'line'; + isLine = shapeOptions.type === 'line', + isPath = shapeOptions.type === 'path'; var update; var x0, y0, x1, y1, xAnchor, yAnchor, astrX0, astrY0, astrX1, astrY1, astrXAnchor, astrYAnchor; @@ -232,7 +233,7 @@ function setupDragElement(gd, shapePath, shapeOptions, index, shapeLayer) { h = dragBBox.bottom - dragBBox.top, x = evt.clientX - dragBBox.left, y = evt.clientY - dragBBox.top, - cursor = (w > MINWIDTH && h > MINHEIGHT && !evt.shiftKey) ? + cursor = (!isPath && w > MINWIDTH && h > MINHEIGHT && !evt.shiftKey) ? dragElement.getCursor(x / w, 1 - y / h) : 'move'; @@ -358,8 +359,8 @@ function setupDragElement(gd, shapePath, shapeOptions, index, shapeLayer) { } function resizeShape(dx, dy) { - if(shapeOptions.type === 'path') { - // TODO: implement path resize + if(isPath) { + // TODO: implement path resize, don't forget to update dragMode code var noOp = function(coord) { return coord; }, moveX = noOp, moveY = noOp; From f2c9a4c96528664e460b543cf74995117e3f9770 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robert=20M=C3=B6stl?= Date: Thu, 3 May 2018 09:36:39 +0200 Subject: [PATCH 09/12] Correct baseline image for shapes_move-and-reshape-lines image test - Reason: have forgotten to update the baseline image after correcting a typo in an annotation. --- .../shapes_move-and-reshape-lines.png | Bin 103109 -> 102610 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/test/image/baselines/shapes_move-and-reshape-lines.png b/test/image/baselines/shapes_move-and-reshape-lines.png index a3238a2433e1ae71a5e7118e5ad19287955581d3..2bb1df1c0de79fd2c9865e2957674ed454f76b47 100644 GIT binary patch delta 49657 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 Date: Wed, 9 May 2018 08:52:34 +0200 Subject: [PATCH 10/12] Ensure cross-hair rendered upon moving pixel sized shape is sharp [2038] --- src/components/shapes/draw.js | 6 +++++- src/components/shapes/helpers.js | 23 +++++++++++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/src/components/shapes/draw.js b/src/components/shapes/draw.js index 14d45385071..c6166f13a22 100644 --- a/src/components/shapes/draw.js +++ b/src/components/shapes/draw.js @@ -435,13 +435,14 @@ function setupDragElement(gd, shapePath, shapeOptions, index, shapeLayer) { var visualCues = shapeLayer.selectAll('.visual-cue').data([0]); // Enter + var strokeWidth = 1; visualCues.enter() .append('path') .attr({ 'fill': '#fff', 'fill-rule': 'evenodd', 'stroke': '#000', - 'stroke-width': 1 + 'stroke-width': strokeWidth }) .classed('visual-cue', true); @@ -457,6 +458,9 @@ function setupDragElement(gd, shapePath, shapeOptions, index, shapeLayer) { shapeOptions.y0 : helpers.extractPathCoords(shapeOptions.path, constants.paramIsY)[0]); + anchorX = helpers.transformPosForSharpStrokeRendering(anchorX, strokeWidth); + anchorY = helpers.transformPosForSharpStrokeRendering(anchorY, strokeWidth); + var crossHairPath = 'M' + (anchorX - 1) + ',' + (anchorY - 1) + 'l-8,0 l0,-2 l8,0 l0,-8 l2,0 l0,8 l8,0 l0,2 l-8,0 l0,8 l-2,0 Z'; diff --git a/src/components/shapes/helpers.js b/src/components/shapes/helpers.js index 065e14f31f1..acf16a96658 100644 --- a/src/components/shapes/helpers.js +++ b/src/components/shapes/helpers.js @@ -96,3 +96,26 @@ exports.getPixelToData = function(gd, axis, isVertical) { return pixelToData; }; + +/** + * Based on the given stroke width, transforms the passed + * position value to represent either a full or half pixel. + * + * In case of an odd stroke width (e.g. 1), this measure ensures + * that a stroke positioned at the returned position isn't rendered + * blurry due to anti-aliasing. + * + * In case of an even stroke width (e.g. 2), this measure ensures + * that the position value is transformed to a full pixel value + * so that anti-aliasing doesn't take effect either. + * + * @param {number} pos The raw position value to be transformed + * @param {number} strokeWidth The stroke width + * @returns {number} either an integer or a .5 decimal number + */ +exports.transformPosForSharpStrokeRendering = function(pos, strokeWidth) { + var strokeWidthIsOdd = Math.round(strokeWidth % 2) === 1; + var posValAsInt = Math.round(pos); + + return strokeWidthIsOdd ? posValAsInt + 0.5 : posValAsInt; +}; From c686473fc14302899e6c3c6c070be8bba650f672 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robert=20M=C3=B6stl?= Date: Wed, 9 May 2018 09:33:21 +0200 Subject: [PATCH 11/12] Simplify `d` attr of anchor cross for pixel-sized shapes [2038] --- src/components/shapes/draw.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/shapes/draw.js b/src/components/shapes/draw.js index c6166f13a22..9d61b585d75 100644 --- a/src/components/shapes/draw.js +++ b/src/components/shapes/draw.js @@ -462,7 +462,7 @@ function setupDragElement(gd, shapePath, shapeOptions, index, shapeLayer) { anchorY = helpers.transformPosForSharpStrokeRendering(anchorY, strokeWidth); var crossHairPath = 'M' + (anchorX - 1) + ',' + (anchorY - 1) + - 'l-8,0 l0,-2 l8,0 l0,-8 l2,0 l0,8 l8,0 l0,2 l-8,0 l0,8 l-2,0 Z'; + 'h-8v2h8 v8h2v-8 h8v-2h-8 v-8h-2 Z'; visualCues.attr('d', crossHairPath); } From e34212b9bccf47ef3db00643d3f7f3e54675bb60 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robert=20M=C3=B6stl?= Date: Wed, 9 May 2018 14:01:11 +0200 Subject: [PATCH 12/12] Draw bar instead of anchor cross when moving hybrid-sized shapes [2038] - When moving a shape that is pixel-sized in one dimension and data-sized or paper-sized in the other dimension a centered vertical or horizontal bar is rendered instead of the anchor cross. - Thereby fix a bug in `extractPathCoords` to return numerical values instead of numbers represented as strings. - Also introduce the statistical `midRange` function in lib. --- src/components/shapes/draw.js | 51 +++++++++++++++++++++----------- src/components/shapes/helpers.js | 8 +++-- src/lib/index.js | 1 + src/lib/stats.js | 5 ++++ test/jasmine/tests/lib_test.js | 32 ++++++++++++++++++-- 5 files changed, 74 insertions(+), 23 deletions(-) diff --git a/src/components/shapes/draw.js b/src/components/shapes/draw.js index 9d61b585d75..fef3eb31931 100644 --- a/src/components/shapes/draw.js +++ b/src/components/shapes/draw.js @@ -447,24 +447,39 @@ function setupDragElement(gd, shapePath, shapeOptions, index, shapeLayer) { .classed('visual-cue', true); // Update - var anchorX = x2p(xPixelSized ? - shapeOptions.xanchor : - isNotPath ? - shapeOptions.x0 : - helpers.extractPathCoords(shapeOptions.path, constants.paramIsX)[0]); - var anchorY = y2p(yPixelSized ? - shapeOptions.yanchor : - isNotPath ? - shapeOptions.y0 : - helpers.extractPathCoords(shapeOptions.path, constants.paramIsY)[0]); - - anchorX = helpers.transformPosForSharpStrokeRendering(anchorX, strokeWidth); - anchorY = helpers.transformPosForSharpStrokeRendering(anchorY, strokeWidth); - - var crossHairPath = 'M' + (anchorX - 1) + ',' + (anchorY - 1) + - 'h-8v2h8 v8h2v-8 h8v-2h-8 v-8h-2 Z'; - - visualCues.attr('d', crossHairPath); + var posX = x2p( + xPixelSized ? + shapeOptions.xanchor : + Lib.midRange( + isNotPath ? + [shapeOptions.x0, shapeOptions.x1] : + helpers.extractPathCoords(shapeOptions.path, constants.paramIsX)) + ); + var posY = y2p( + yPixelSized ? + shapeOptions.yanchor : + Lib.midRange( + isNotPath ? + [shapeOptions.y0, shapeOptions.y1] : + helpers.extractPathCoords(shapeOptions.path, constants.paramIsY)) + ); + + posX = helpers.roundPositionForSharpStrokeRendering(posX, strokeWidth); + posY = helpers.roundPositionForSharpStrokeRendering(posY, strokeWidth); + + if(xPixelSized && yPixelSized) { + var crossPath = 'M' + (posX - 1 - strokeWidth) + ',' + (posY - 1 - strokeWidth) + + 'h-8v2h8 v8h2v-8 h8v-2h-8 v-8h-2 Z'; + visualCues.attr('d', crossPath); + } else if(xPixelSized) { + var vBarPath = 'M' + (posX - 1 - strokeWidth) + ',' + (posY - 9 - strokeWidth) + + 'v18 h2 v-18 Z'; + visualCues.attr('d', vBarPath); + } else { + var hBarPath = 'M' + (posX - 9 - strokeWidth) + ',' + (posY - 1 - strokeWidth) + + 'h18 v2 h-18 Z'; + visualCues.attr('d', hBarPath); + } } } diff --git a/src/components/shapes/helpers.js b/src/components/shapes/helpers.js index acf16a96658..aac463393d0 100644 --- a/src/components/shapes/helpers.js +++ b/src/components/shapes/helpers.js @@ -11,6 +11,8 @@ var constants = require('./constants'); +var Lib = require('../../lib'); + // special position conversion functions... category axis positions can't be // specified by their data values, because they don't make a continuous mapping. // so these have to be specified in terms of the category serial numbers, @@ -50,7 +52,7 @@ exports.extractPathCoords = function(path, paramsToUse) { var params = segment.substr(1).match(constants.paramRE); if(!params || params.length < relevantParamIdx) return; - extractedCoordinates.push(params[relevantParamIdx]); + extractedCoordinates.push(Lib.cleanNumber(params[relevantParamIdx])); }); return extractedCoordinates; @@ -98,7 +100,7 @@ exports.getPixelToData = function(gd, axis, isVertical) { }; /** - * Based on the given stroke width, transforms the passed + * Based on the given stroke width, rounds the passed * position value to represent either a full or half pixel. * * In case of an odd stroke width (e.g. 1), this measure ensures @@ -113,7 +115,7 @@ exports.getPixelToData = function(gd, axis, isVertical) { * @param {number} strokeWidth The stroke width * @returns {number} either an integer or a .5 decimal number */ -exports.transformPosForSharpStrokeRendering = function(pos, strokeWidth) { +exports.roundPositionForSharpStrokeRendering = function(pos, strokeWidth) { var strokeWidthIsOdd = Math.round(strokeWidth % 2) === 1; var posValAsInt = Math.round(pos); diff --git a/src/lib/index.js b/src/lib/index.js index 75354fd4972..9c2b4b03cb1 100644 --- a/src/lib/index.js +++ b/src/lib/index.js @@ -67,6 +67,7 @@ var statsModule = require('./stats'); lib.aggNums = statsModule.aggNums; lib.len = statsModule.len; lib.mean = statsModule.mean; +lib.midRange = statsModule.midRange; lib.variance = statsModule.variance; lib.stdev = statsModule.stdev; lib.interp = statsModule.interp; diff --git a/src/lib/stats.js b/src/lib/stats.js index a717f7b49bd..71c23d70375 100644 --- a/src/lib/stats.js +++ b/src/lib/stats.js @@ -56,6 +56,11 @@ exports.mean = function(data, len) { return exports.aggNums(function(a, b) { return a + b; }, 0, data) / len; }; +exports.midRange = function(numArr) { + if(numArr === undefined || numArr.length === 0) return undefined; + return (exports.aggNums(Math.max, null, numArr) + exports.aggNums(Math.min, null, numArr)) / 2; +}; + exports.variance = function(data, len, mean) { if(!len) len = exports.len(data); if(!isNumeric(mean)) mean = exports.mean(data, len); diff --git a/test/jasmine/tests/lib_test.js b/test/jasmine/tests/lib_test.js index 62db6868a9f..dffebe8ae9a 100644 --- a/test/jasmine/tests/lib_test.js +++ b/test/jasmine/tests/lib_test.js @@ -108,12 +108,12 @@ describe('Test lib.js:', function() { }); describe('mean() should', function() { - it('toss out non-numerics (strings):', function() { + it('toss out non-numerics (strings)', function() { var input = [1, 2, 'apple', 'orange'], res = Lib.mean(input); expect(res).toEqual(1.5); }); - it('toss out non-numerics (NaN):', function() { + it('toss out non-numerics (NaN)', function() { var input = [1, 2, NaN], res = Lib.mean(input); expect(res).toEqual(1.5); @@ -125,6 +125,34 @@ describe('Test lib.js:', function() { }); }); + describe('midRange() should', function() { + it('should calculate the arithmetic mean of the maximum and minimum value of a given array', function() { + var input = [1, 5.5, 6, 15, 10, 13], + res = Lib.midRange(input); + expect(res).toEqual(8); + }); + it('toss out non-numerics (strings)', function() { + var input = [1, 2, 'apple', 'orange'], + res = Lib.midRange(input); + expect(res).toEqual(1.5); + }); + it('toss out non-numerics (NaN)', function() { + var input = [1, 2, NaN], + res = Lib.midRange(input); + expect(res).toEqual(1.5); + }); + it('should be able to deal with array of length 1', function() { + var input = [10], + res = Lib.midRange(input); + expect(res).toEqual(10); + }); + it('should return undefined for an empty array', function() { + var input = [], + res = Lib.midRange(input); + expect(res).toBeUndefined(); + }); + }); + describe('variance() should', function() { it('return 0 on input [2, 2, 2, 2, 2]:', function() { var input = [2, 2, 2, 2],