diff --git a/lib/context2d.js b/lib/context2d.js index 05403c4..ef3b6a7 100644 --- a/lib/context2d.js +++ b/lib/context2d.js @@ -165,7 +165,8 @@ Context2d.prototype.setTransform = function(){ */ Context2d.prototype.__defineSetter__('fillStyle', function(val){ - if (~['CanvasGradient','CanvasPattern'].indexOf(val.constructor.name)) { + if ('CanvasGradient' == val.constructor.name + || 'CanvasPattern' == val.constructor.name) { this.lastFillStyle = val; this._setFillPattern(val); } else if ('string' == typeof val) { @@ -191,7 +192,8 @@ Context2d.prototype.__defineGetter__('fillStyle', function(){ */ Context2d.prototype.__defineSetter__('strokeStyle', function(val){ - if (~['CanvasGradient','CanvasPattern'].indexOf(val.constructor.name)) { + if ('CanvasGradient' == val.constructor.name + || 'CanvasPattern' == val.constructor.name) { this.lastStrokeStyle = val; this._setStrokePattern(val); } else if ('string' == typeof val) { diff --git a/src/CanvasRenderingContext2d.cc b/src/CanvasRenderingContext2d.cc index b99499c..e976e0f 100644 --- a/src/CanvasRenderingContext2d.cc +++ b/src/CanvasRenderingContext2d.cc @@ -126,7 +126,7 @@ Context2d::Context2d(Canvas *canvas) { state->globalAlpha = 1; state->textAlignment = -1; state->fillPattern = state->strokePattern = NULL; - state->strokeGradient = state->strokeGradient = NULL; + state->fillGradient = state->strokeGradient = NULL; state->textBaseline = NULL; rgba_t transparent = { 0,0,0,1 }; rgba_t transparent_black = { 0,0,0,0 }; @@ -1064,7 +1064,7 @@ Context2d::SetFillPattern(const Arguments &args) { if (Gradient::constructor->HasInstance(obj)){ Context2d *context = ObjectWrap::Unwrap(args.This()); Gradient *grad = ObjectWrap::Unwrap(obj); - context->state->strokeGradient = grad->pattern(); + context->state->fillGradient = grad->pattern(); } else if(Pattern::constructor->HasInstance(obj)){ Context2d *context = ObjectWrap::Unwrap(args.This()); Pattern *pattern = ObjectWrap::Unwrap(obj); diff --git a/test/canvas.test.js b/test/canvas.test.js index 4895581..7049c5c 100644 --- a/test/canvas.test.js +++ b/test/canvas.test.js @@ -520,7 +520,7 @@ module.exports = { ctx.fillStyle = pattern; ctx.fillRect(0,0,20,20); - + var imageData = ctx.getImageData(0,0,20,20); assert.equal(20, imageData.width); assert.equal(20, imageData.height); @@ -542,5 +542,36 @@ module.exports = { // alternate b, except when moving to a new row b = i % (imageData.width*4) == 0 ? b : !b; } + }, + + 'test Context2d#createLinearGradient()': function(){ + var canvas = new Canvas(20, 1) + , ctx = canvas.getContext('2d') + , gradient = ctx.createLinearGradient(1,1,19,1); + + gradient.addColorStop(0,'#fff'); + gradient.addColorStop(1,'#000'); + + ctx.fillStyle = gradient; + ctx.fillRect(0,0,20,1); + + var imageData = ctx.getImageData(0,0,20,1); + assert.equal(20, imageData.width); + assert.equal(1, imageData.height); + assert.equal(80, imageData.data.length); + + // (0,0) white + assert.equal(255, imageData.data[0]); + assert.equal(255, imageData.data[1]); + assert.equal(255, imageData.data[2]); + assert.equal(255, imageData.data[3]); + + // (20,0) black + var i = imageData.data.length-4; + assert.equal(0, imageData.data[i+0]); + assert.equal(0, imageData.data[i+1]); + assert.equal(0, imageData.data[i+2]); + assert.equal(255, imageData.data[i+3]); + } } \ No newline at end of file