From 2fcc71a469440ad3656d3a53ef5e04166355f585 Mon Sep 17 00:00:00 2001 From: Tj Holowaychuk Date: Fri, 12 Nov 2010 11:08:14 -0800 Subject: [PATCH] Started drawImage logic --- src/CanvasRenderingContext2d.cc | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/src/CanvasRenderingContext2d.cc b/src/CanvasRenderingContext2d.cc index 3218343..047185c 100644 --- a/src/CanvasRenderingContext2d.cc +++ b/src/CanvasRenderingContext2d.cc @@ -385,7 +385,7 @@ Context2d::New(const Arguments &args) { } /* - * Draw image. + * Draw image src image to the destination (context). */ Handle @@ -408,10 +408,22 @@ Context2d::DrawImage(const Arguments &args) { double dh = args[4]->IsNumber() ? args[4]->NumberValue() : img->height; // Draw - cairo_t *ctx = context->context(); uint8_t *dst = context->canvas()->data(); + int dstStride = context->canvas()->stride(); uint8_t *src = img->data(); - int stride = img->stride(); + int srcStride = img->stride(); + + for (int y = 0; y < dh; ++y) { + uint32_t *srcRow = (uint32_t *)(src + srcStride * y); + uint32_t *dstRow = (uint32_t *)(dst + dstStride * y); + for (int x = 0; x < dw; ++x) { + uint32_t *srcPixel = srcRow + x; + uint32_t *dstPixel = dstRow + x; + *dstPixel = *srcPixel; + } + } + + // TODO: cairo_surface_mark_dirty_rectangle(surface, x, y, w, h) return Undefined(); }