12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- var d3 = require("d3"),
- patterns = require("./patterns.js"),
- sample = require("./sample-wave.js"),
- textWrapper = require("./text-wrapper.js");
-
- module.exports = function(context) {
-
- context.patternQuality = "best";
-
- var renderer = {};
-
- renderer.context = context;
-
- renderer.update = function(options) {
-
- // TODO cleaner defaults
- options.backgroundColor = options.backgroundColor || "#fff";
- options.waveColor = options.waveColor || options.foregroundColor || "#000";
- options.captionColor = options.captionColor || options.foregroundColor || "#000";
-
- if (typeof options.waveTop !== "number") options.waveTop = 0;
- if (typeof options.waveBottom !== "number") options.waveBottom = options.height;
- if (typeof options.waveLeft !== "number") options.waveLeft = 0;
- if (typeof options.waveRight !== "number") options.waveRight = options.width;
-
- this.wrapText = textWrapper(context, options);
- this.options = options;
- this.waveform = options.waveform || [sample.slice(0, options.samplesPerFrame)];
- return this;
- };
-
- // Get the waveform data for this frame
- renderer.getWaveform = function(frameNumber) {
- return this.waveform[Math.min(this.waveform.length - 1, frameNumber)];
- };
-
- // Draw the frame
- renderer.drawFrame = function(frameNumber) {
-
- // Draw the background image and/or background color
- context.clearRect(0, 0, this.options.width, this.options.height);
-
- context.fillStyle = this.options.backgroundColor;
- context.fillRect(0, 0, this.options.width, this.options.height);
-
- if (this.backgroundImage) {
- context.drawImage(this.backgroundImage, 0, 0, this.options.width, this.options.height);
- }
-
- patterns[this.options.pattern || "wave"](context, this.getWaveform(frameNumber), this.options);
-
- // Write the caption
- if (this.caption) {
- this.wrapText(this.caption);
- }
-
- return this;
-
- };
-
- return renderer;
-
- }
|