| Index: content/browser/resources/media/new/range_graph.js
|
| diff --git a/content/browser/resources/media/new/range_graph.js b/content/browser/resources/media/new/range_graph.js
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..069ab20c516e4ec3beac03c123837100daa50acd
|
| --- /dev/null
|
| +++ b/content/browser/resources/media/new/range_graph.js
|
| @@ -0,0 +1,141 @@
|
| +// Copyright (c) 2012 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.
|
| +
|
| +
|
| +// From Grumdrig
|
| +// stackoverflow.com/questions/1255512/how-to-draw-a-rounded-rectangle-on-html-canvas
|
| +CanvasRenderingContext2D.prototype.roundRect = function (x, y, w, h, r) {
|
| + "use strict";
|
| +
|
| + if (w < 2 * r) {
|
| + r = w / 2;
|
| + }
|
| + if (h < 2 * r) {
|
| + r = h / 2;
|
| + }
|
| + this.beginPath();
|
| + this.moveTo(x + r, y);
|
| + this.arcTo(x + w, y, x + w, y + h, r);
|
| + this.arcTo(x + w, y + h, x, y + h, r);
|
| + this.arcTo(x, y + h, x, y, r);
|
| + this.arcTo(x, y, x + w, y, r);
|
| + this.closePath();
|
| + return this;
|
| +};
|
| +
|
| +// Creates a new RangeGraph object that contains a canvas element that
|
| +// it draws to.
|
| +function RangeGraph(max, existing) {
|
| + "use strict";
|
| +
|
| + this.max = max;
|
| +
|
| + // If we already have a <canvas> element to draw to, use that
|
| + this.element = existing || document.createElement("canvas");
|
| + this.context = this.element.getContext('2d');
|
| +
|
| + this.cornerLeft = 2;
|
| + this.cornerTop = 2;
|
| +
|
| + this.toDraw = [];
|
| +
|
| + // The drawing styles. One constant list to draw from,
|
| + this.STYLES = ["rgb(100, 10,10)", "rgb(100, 10, 100)",
|
| + "rgb(70, 130, 70)", "rgb(70, 70, 130)" ];
|
| + // another list to pop off of
|
| + this.styles = this.STYLES;
|
| +}
|
| +
|
| +RangeGraph.prototype.setWidth = function (width) {
|
| + "use strict";
|
| + this.width = width;
|
| + this.element.width = this.width + this.cornerLeft * 2;
|
| + this.height = 13;
|
| + this.element.height = this.height + this.cornerTop * 2;
|
| +};
|
| +
|
| +RangeGraph.prototype.extend = function (max) {
|
| + "use strict";
|
| + this.end = max;
|
| +};
|
| +
|
| +RangeGraph.prototype.plot = function (start, end) {
|
| + "use strict";
|
| +
|
| + // Always keep them in order
|
| + if (end > start) {
|
| + this.toDraw.push([start, end]);
|
| + } else {
|
| + this.toDraw.push([end, start]);
|
| + }
|
| +};
|
| +
|
| +RangeGraph.prototype.draw = function () {
|
| + "use strict";
|
| +
|
| + // Fill the canvas wit white.
|
| + this.context.fillStyle = "white";
|
| + this.context.clearRect(0, 0, this.width, this.height);
|
| +
|
| + // The light-grey background.
|
| + this.context.fillStyle = "rgb(200,200,200)";
|
| + this.context.roundRect(0, 0, this.element.width, this.element.height, 2);
|
| + this.context.fill();
|
| +
|
| + // The inner shadow.
|
| + this.context.fillStyle = "rgba(170,170,170, 0.7)";
|
| + this.context.roundRect(this.cornerLeft, this.cornerTop, this.width,
|
| + this.height, 2);
|
| + this.context.fill();
|
| +
|
| + // Translate because line drawing on whole pixels does
|
| + // terrible anti-aliasing.
|
| + this.context.translate(0.5, 0.5);
|
| +
|
| + this.toDraw.forEach(function (pair) {
|
| + var start = pair[0],
|
| + end = pair[1],
|
| + startPercent = start / this.max,
|
| + endPercent = end / this.max,
|
| + startPx = Math.floor(startPercent * this.width),
|
| + endPx = Math.ceil(endPercent * this.width);
|
| +
|
| + // The main color bar
|
| + this.context.fillStyle = this.styles.pop() || "red";
|
| + this.context.roundRect(this.cornerLeft + startPx, this.cornerTop,
|
| + endPx - startPx, this.height - 1, 2);
|
| + this.context.fill();
|
| +
|
| + // The gradient up on top
|
| + this.context.fillStyle = "rgba(200,200,200,0.4)";
|
| + this.context.roundRect(this.cornerLeft + startPx, this.cornerTop,
|
| + endPx - startPx,
|
| + Math.floor(this.height / 2.5) + 0.5, 2);
|
| + this.context.fill();
|
| +
|
| +
|
| + // The black outline
|
| + this.context.roundRect(this.cornerLeft + startPx, this.cornerTop,
|
| + endPx - startPx, this.height - 1, 2);
|
| + this.context.strokeStyle = "rgba(0, 0, 0, 0.7)";
|
| + this.context.stroke();
|
| +
|
| + }, this);
|
| +
|
| +
|
| + // The tick marks
|
| + this.context.fillStyle = "rgba(0,0,0,0.4)";
|
| + var percent;
|
| + for (percent = 0.1; percent <= 0.9; percent += 0.1) {
|
| + var pxPos = Math.floor(percent * this.width);
|
| + this.context.fillRect(pxPos + 0.5, 2, 1, this.height - 1);
|
| + }
|
| +
|
| + // Re-translate for the next call
|
| + this.context.translate(-0.5, -0.5);
|
| +
|
| +
|
| + this.toDraw = [];
|
| + this.styles = this.STYLES;
|
| +};
|
|
|