src/extensions/default/InlineTimingFunctionEditor/BezierCurveEditor.js
function BezierCanvas(canvas, bezier, padding) {
        this.canvas  = canvas;
        this.bezier  = bezier;
        this.padding = this.getPadding(padding);

        // Convert to a cartesian coordinate system with axes from 0 to 1
        var ctx = this.canvas.getContext("2d"),
            p = this.padding;

        ctx.scale(canvas.width * (1 - p[1] - p[3]), -canvas.height * 0.5 * (1 - p[0] - p[2]));
        ctx.translate(p[3] / (1 - p[1] - p[3]), (-1 - p[0] / (1 - p[0] - p[2])) - 0.5);
    }
function BezierCanvas(canvas, bezier, padding) {
        this.canvas  = canvas;
        this.bezier  = bezier;
        this.padding = this.getPadding(padding);

        // Convert to a cartesian coordinate system with axes from 0 to 1
        var ctx = this.canvas.getContext("2d"),
            p = this.padding;

        ctx.scale(canvas.width * (1 - p[1] - p[3]), -canvas.height * 0.5 * (1 - p[0] - p[2]));
        ctx.translate(p[3] / (1 - p[1] - p[3]), (-1 - p[0] / (1 - p[0] - p[2])) - 0.5);
    }
function BezierCanvas ( canvas , bezier , padding ) { this . canvas = canvas ; this . bezier = bezier ; this . padding = this . getPadding ( padding ) ; // Convert to a cartesian coordinate system with axes from 0 to 1 var ctx = this . canvas . getContext ( "2d" ) , p = this . padding ; ctx . scale ( canvas . width * ( 1 - p [ 1 ] - p [ 3 ] ) , - canvas . height * 0.5 * ( 1 - p [ 0 ] - p [ 2 ] ) ) ; ctx . translate ( p [ 3 ] / ( 1 - p [ 1 ] - p [ 3 ] ) , ( - 1 - p [ 0 ] / ( 1 - p [ 0 ] - p [ 2 ] ) ) - 0.5 ) ; }
BezierCanvas object constructor

@param {Element} canvas Inline editor <canvas> element
@param {CubicBezier} bezier Associated CubicBezier object
@param {number|Array.number} padding Element padding
BezierCanvas object constructor