Browse Source

Added a test (and fix) for a regression with gradients

v1.x
Robert Sköld 13 years ago
parent
commit
46bda423f8
  1. 6
      lib/context2d.js
  2. 4
      src/CanvasRenderingContext2d.cc
  3. 33
      test/canvas.test.js

6
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) {

4
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<Context2d>(args.This());
Gradient *grad = ObjectWrap::Unwrap<Gradient>(obj);
context->state->strokeGradient = grad->pattern();
context->state->fillGradient = grad->pattern();
} else if(Pattern::constructor->HasInstance(obj)){
Context2d *context = ObjectWrap::Unwrap<Context2d>(args.This());
Pattern *pattern = ObjectWrap::Unwrap<Pattern>(obj);

33
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]);
}
}
Loading…
Cancel
Save