# Source: objects/style/RadialGradientStyle.js

    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};