import {GradientStyle} from "./GradientStyle";
import {Style} from "./Style";
import {Vector2} from "../../math/Vector2";
/**
* Radial gradient interpolates colors from a point to another point around up to a starting and finishing radius value.
*
* If the start and end point are the same it interpolates around the starting and ending radius forming a circle. Outside of the radius the color is solid.
*
* The get method returns a CanvasGradient https://developer.mozilla.org/en-US/docs/Web/API/CanvasGradient when generated.
*
* @class
* @extends {GradientStyle}
*/
function RadialGradientStyle()
{
GradientStyle.call(this);
/**
* The coordinates of the starting circle of the gradient.
*
* @type {Vector2}
*/
this.start = new Vector2(0, 0);
/**
* The radius of the starting circle.
*
* @type {number}
*/
this.startRadius = 10;
/**
* The coordinates of the ending circle of the gradient.
*
* @type {Vector2}
*/
this.end = new Vector2(0, 0);
/**
* The radius of the ending circle.
*
* @type {number}
*/
this.endRadius = 50;
}
RadialGradientStyle.prototype = Object.create(GradientStyle.prototype);
Style.register(RadialGradientStyle, "RadialGradient");
RadialGradientStyle.prototype.get = function(context)
{
var style = context.createRadialGradient(this.start.x, this.start.y, this.startRadius, this.end.x, this.end.y, this.endRadius);
for(var i = 0; i < this.colors.length; i++)
{
style.addColorStop(this.colors[i].offset, this.colors[i].color);
}
return style;
};
RadialGradientStyle.prototype.serialize = function ()
{
var data = GradientStyle.prototype.serialize.call(this);
Object.assign(data, {
type: "RadialGradient",
start: this.start.toArray(),
end: this.end.toArray(),
startRadius: this.startRadius,
endRadius: this.endRadius
});
return data;
};
RadialGradientStyle.prototype.parse = function (data)
{
GradientStyle.prototype.parse.call(this, data);
this.start.fromArray(data.start);
this.end.fromArray(data.end);
this.startRadius = data.startRadius;
this.endRadius = data.endRadius;
};
export {RadialGradientStyle};