| Index: third_party/WebKit/Source/devtools/front_end/ui/BezierUI.js
|
| diff --git a/third_party/WebKit/Source/devtools/front_end/ui/BezierUI.js b/third_party/WebKit/Source/devtools/front_end/ui/BezierUI.js
|
| index 89e1bcae6d7a03b64ed075f1221e59e932ee3afd..dc330c745f2502869177b7f69a8d70550cfed796 100644
|
| --- a/third_party/WebKit/Source/devtools/front_end/ui/BezierUI.js
|
| +++ b/third_party/WebKit/Source/devtools/front_end/ui/BezierUI.js
|
| @@ -1,127 +1,130 @@
|
| // Copyright (c) 2015 The Chromium Authors. All rights reserved.
|
| // Use of this source code is governed by a BSD-style license that can be
|
| // found in the LICENSE file.
|
| -
|
| /**
|
| - * @constructor
|
| - * @param {number} width
|
| - * @param {number} height
|
| - * @param {number} marginTop
|
| - * @param {number} controlPointRadius
|
| - * @param {boolean} linearLine
|
| + * @unrestricted
|
| */
|
| -WebInspector.BezierUI = function(width, height, marginTop, controlPointRadius, linearLine)
|
| -{
|
| +WebInspector.BezierUI = class {
|
| + /**
|
| + * @param {number} width
|
| + * @param {number} height
|
| + * @param {number} marginTop
|
| + * @param {number} controlPointRadius
|
| + * @param {boolean} linearLine
|
| + */
|
| + constructor(width, height, marginTop, controlPointRadius, linearLine) {
|
| this.width = width;
|
| this.height = height;
|
| this.marginTop = marginTop;
|
| this.radius = controlPointRadius;
|
| this.linearLine = linearLine;
|
| -};
|
| + }
|
|
|
| -WebInspector.BezierUI.prototype = {
|
| - /**
|
| - * @return {number}
|
| - */
|
| - curveWidth: function()
|
| - {
|
| - return this.width - this.radius * 2;
|
| - },
|
| + /**
|
| + * @param {!WebInspector.Geometry.CubicBezier} bezier
|
| + * @param {!Element} path
|
| + * @param {number} width
|
| + */
|
| + static drawVelocityChart(bezier, path, width) {
|
| + var height = WebInspector.BezierUI.Height;
|
| + var pathBuilder = ['M', 0, height];
|
| + /** @const */ var sampleSize = 1 / 40;
|
|
|
| - /**
|
| - * @return {number}
|
| - */
|
| - curveHeight: function()
|
| - {
|
| - return this.height - this.radius * 2 - this.marginTop * 2;
|
| - },
|
| + var prev = bezier.evaluateAt(0);
|
| + for (var t = sampleSize; t < 1 + sampleSize; t += sampleSize) {
|
| + var current = bezier.evaluateAt(t);
|
| + var slope = (current.y - prev.y) / (current.x - prev.x);
|
| + var weightedX = prev.x * (1 - t) + current.x * t;
|
| + slope = Math.tanh(slope / 1.5); // Normalise slope
|
| + pathBuilder = pathBuilder.concat(['L', (weightedX * width).toFixed(2), (height - slope * height).toFixed(2)]);
|
| + prev = current;
|
| + }
|
| + pathBuilder = pathBuilder.concat(['L', width.toFixed(2), height, 'Z']);
|
| + path.setAttribute('d', pathBuilder.join(' '));
|
| + }
|
|
|
| - /**
|
| - * @param {!Element} parentElement
|
| - * @param {string} className
|
| - * @param {number} x1
|
| - * @param {number} y1
|
| - * @param {number} x2
|
| - * @param {number} y2
|
| - */
|
| - _drawLine: function(parentElement, className, x1, y1, x2, y2)
|
| - {
|
| - var line = parentElement.createSVGChild("line", className);
|
| - line.setAttribute("x1", x1 + this.radius);
|
| - line.setAttribute("y1", y1 + this.radius + this.marginTop);
|
| - line.setAttribute("x2", x2 + this.radius);
|
| - line.setAttribute("y2", y2 + this.radius + this.marginTop);
|
| - },
|
| + /**
|
| + * @return {number}
|
| + */
|
| + curveWidth() {
|
| + return this.width - this.radius * 2;
|
| + }
|
|
|
| - /**
|
| - * @param {!Element} parentElement
|
| - * @param {number} startX
|
| - * @param {number} startY
|
| - * @param {number} controlX
|
| - * @param {number} controlY
|
| - */
|
| - _drawControlPoints: function(parentElement, startX, startY, controlX, controlY)
|
| - {
|
| - this._drawLine(parentElement, "bezier-control-line", startX, startY, controlX, controlY);
|
| - var circle = parentElement.createSVGChild("circle", "bezier-control-circle");
|
| - circle.setAttribute("cx", controlX + this.radius);
|
| - circle.setAttribute("cy", controlY + this.radius + this.marginTop);
|
| - circle.setAttribute("r", this.radius);
|
| - },
|
| + /**
|
| + * @return {number}
|
| + */
|
| + curveHeight() {
|
| + return this.height - this.radius * 2 - this.marginTop * 2;
|
| + }
|
|
|
| - /**
|
| - * @param {?WebInspector.Geometry.CubicBezier} bezier
|
| - * @param {!Element} svg
|
| - */
|
| - drawCurve: function(bezier, svg)
|
| - {
|
| - if (!bezier)
|
| - return;
|
| - var width = this.curveWidth();
|
| - var height = this.curveHeight();
|
| - svg.setAttribute("width", this.width);
|
| - svg.setAttribute("height", this.height);
|
| - svg.removeChildren();
|
| - var group = svg.createSVGChild("g");
|
| + /**
|
| + * @param {!Element} parentElement
|
| + * @param {string} className
|
| + * @param {number} x1
|
| + * @param {number} y1
|
| + * @param {number} x2
|
| + * @param {number} y2
|
| + */
|
| + _drawLine(parentElement, className, x1, y1, x2, y2) {
|
| + var line = parentElement.createSVGChild('line', className);
|
| + line.setAttribute('x1', x1 + this.radius);
|
| + line.setAttribute('y1', y1 + this.radius + this.marginTop);
|
| + line.setAttribute('x2', x2 + this.radius);
|
| + line.setAttribute('y2', y2 + this.radius + this.marginTop);
|
| + }
|
|
|
| - if (this.linearLine)
|
| - this._drawLine(group, "linear-line", 0, height, width, 0);
|
| + /**
|
| + * @param {!Element} parentElement
|
| + * @param {number} startX
|
| + * @param {number} startY
|
| + * @param {number} controlX
|
| + * @param {number} controlY
|
| + */
|
| + _drawControlPoints(parentElement, startX, startY, controlX, controlY) {
|
| + this._drawLine(parentElement, 'bezier-control-line', startX, startY, controlX, controlY);
|
| + var circle = parentElement.createSVGChild('circle', 'bezier-control-circle');
|
| + circle.setAttribute('cx', controlX + this.radius);
|
| + circle.setAttribute('cy', controlY + this.radius + this.marginTop);
|
| + circle.setAttribute('r', this.radius);
|
| + }
|
|
|
| - var curve = group.createSVGChild("path", "bezier-path");
|
| - var curvePoints = [
|
| - new WebInspector.Geometry.Point(bezier.controlPoints[0].x * width + this.radius, (1 - bezier.controlPoints[0].y) * height + this.radius + this.marginTop),
|
| - new WebInspector.Geometry.Point(bezier.controlPoints[1].x * width + this.radius, (1 - bezier.controlPoints[1].y) * height + this.radius + this.marginTop),
|
| - new WebInspector.Geometry.Point(width + this.radius, this.marginTop + this.radius)
|
| - ];
|
| - curve.setAttribute("d", "M" + this.radius + "," + (height + this.radius + this.marginTop) + " C" + curvePoints.join(" "));
|
| + /**
|
| + * @param {?WebInspector.Geometry.CubicBezier} bezier
|
| + * @param {!Element} svg
|
| + */
|
| + drawCurve(bezier, svg) {
|
| + if (!bezier)
|
| + return;
|
| + var width = this.curveWidth();
|
| + var height = this.curveHeight();
|
| + svg.setAttribute('width', this.width);
|
| + svg.setAttribute('height', this.height);
|
| + svg.removeChildren();
|
| + var group = svg.createSVGChild('g');
|
|
|
| - this._drawControlPoints(group, 0, height, bezier.controlPoints[0].x * width, (1 - bezier.controlPoints[0].y) * height);
|
| - this._drawControlPoints(group, width, 0, bezier.controlPoints[1].x * width, (1 - bezier.controlPoints[1].y) * height);
|
| - }
|
| + if (this.linearLine)
|
| + this._drawLine(group, 'linear-line', 0, height, width, 0);
|
| +
|
| + var curve = group.createSVGChild('path', 'bezier-path');
|
| + var curvePoints = [
|
| + new WebInspector.Geometry.Point(
|
| + bezier.controlPoints[0].x * width + this.radius,
|
| + (1 - bezier.controlPoints[0].y) * height + this.radius + this.marginTop),
|
| + new WebInspector.Geometry.Point(
|
| + bezier.controlPoints[1].x * width + this.radius,
|
| + (1 - bezier.controlPoints[1].y) * height + this.radius + this.marginTop),
|
| + new WebInspector.Geometry.Point(width + this.radius, this.marginTop + this.radius)
|
| + ];
|
| + curve.setAttribute(
|
| + 'd', 'M' + this.radius + ',' + (height + this.radius + this.marginTop) + ' C' + curvePoints.join(' '));
|
| +
|
| + this._drawControlPoints(
|
| + group, 0, height, bezier.controlPoints[0].x * width, (1 - bezier.controlPoints[0].y) * height);
|
| + this._drawControlPoints(
|
| + group, width, 0, bezier.controlPoints[1].x * width, (1 - bezier.controlPoints[1].y) * height);
|
| + }
|
| };
|
|
|
| WebInspector.BezierUI.Height = 26;
|
|
|
| -/**
|
| - * @param {!WebInspector.Geometry.CubicBezier} bezier
|
| - * @param {!Element} path
|
| - * @param {number} width
|
| - */
|
| -WebInspector.BezierUI.drawVelocityChart = function(bezier, path, width)
|
| -{
|
| - var height = WebInspector.BezierUI.Height;
|
| - var pathBuilder = ["M", 0, height];
|
| - /** @const */ var sampleSize = 1 / 40;
|
|
|
| - var prev = bezier.evaluateAt(0);
|
| - for (var t = sampleSize; t < 1 + sampleSize; t += sampleSize) {
|
| - var current = bezier.evaluateAt(t);
|
| - var slope = (current.y - prev.y) / (current.x - prev.x);
|
| - var weightedX = prev.x * (1 - t) + current.x * t;
|
| - slope = Math.tanh(slope / 1.5); // Normalise slope
|
| - pathBuilder = pathBuilder.concat(["L", (weightedX * width).toFixed(2), (height - slope * height).toFixed(2) ]);
|
| - prev = current;
|
| - }
|
| - pathBuilder = pathBuilder.concat(["L", width.toFixed(2), height, "Z"]);
|
| - path.setAttribute("d", pathBuilder.join(" "));
|
| -};
|
|
|