From f266fc3e5ec756f3fbdfab7155f6a1b1400bdc9e Mon Sep 17 00:00:00 2001 From: Tj Holowaychuk Date: Mon, 15 Nov 2010 18:08:48 -0800 Subject: [PATCH] Fixed putImageData() src --- src/CanvasRenderingContext2d.cc | 14 ++++++++++---- test/public/tests.js | 2 +- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/src/CanvasRenderingContext2d.cc b/src/CanvasRenderingContext2d.cc index 7d57282..2cb3489 100644 --- a/src/CanvasRenderingContext2d.cc +++ b/src/CanvasRenderingContext2d.cc @@ -407,6 +407,8 @@ Context2d::PutImageData(const Arguments &args) { int sx = 0 , sy = 0 + , sw = 0 + , sh = 0 , dx = args[1]->NumberValue() , dy = args[2]->NumberValue() , rows @@ -417,17 +419,21 @@ Context2d::PutImageData(const Arguments &args) { cols = arr->width(); rows = arr->height(); break; - case 7: + case 7: { sx = args[3]->NumberValue(); sy = args[4]->NumberValue(); - cols = args[5]->NumberValue(); - rows = args[6]->NumberValue(); + sw = args[5]->NumberValue(); + sh = args[6]->NumberValue(); + cols = sw; + rows = sh; + //dx += sx + sw; + } break; default: return ThrowException(Exception::Error(String::New("invalid arguments"))); } - uint8_t *srcRows = src; + uint8_t *srcRows = src + sy * srcStride + sx * 4; for (int y = 0; y < rows; ++y) { uint32_t *row = (uint32_t *)(dst + dstStride * (y + dy)); for (int x = 0; x < cols; ++x) { diff --git a/test/public/tests.js b/test/public/tests.js index 8b82300..cc6cd41 100644 --- a/test/public/tests.js +++ b/test/public/tests.js @@ -1514,5 +1514,5 @@ tests['putImageData() 6'] = function(ctx){ } ctx.strokeRect(60,60,50,30); var data = ctx.getImageData(0,0,50,50); - ctx.putImageData(data,60,60,30,10,50,30); + ctx.putImageData(data,60,60,10,0,35,30); }; \ No newline at end of file