Browse Source

Added drawImage(canvas) support. Closes #67

v1.x
Tj Holowaychuk 14 years ago
parent
commit
30c2f2c558
  1. 42
      src/CanvasRenderingContext2d.cc

42
src/CanvasRenderingContext2d.cc

@ -508,20 +508,38 @@ Context2d::DrawImage(const Arguments &args) {
return ThrowException(Exception::Error(String::New("drawImage() needs cairo >= 1.10.0")));
#else
int sx = 0
, sy = 0
, sw = 0
, sh = 0
, dx, dy, dw, dh;
cairo_surface_t *surface;
Local<Object> obj = args[0]->ToObject();
if (!Image::constructor->HasInstance(obj))
return ThrowException(Exception::TypeError(String::New("Image expected")));
Image *img = ObjectWrap::Unwrap<Image>(obj);
// Image
if (Image::constructor->HasInstance(obj)) {
Image *img = ObjectWrap::Unwrap<Image>(obj);
sw = img->width;
sh = img->height;
surface = img->surface();
// Canvas
} else if (Canvas::constructor->HasInstance(obj)) {
Canvas *canvas = ObjectWrap::Unwrap<Canvas>(obj);
sw = canvas->width;
sh = canvas->height;
surface = canvas->surface();
// Invalid
} else {
return ThrowException(Exception::TypeError(String::New("Image or Canvas expected")));
}
Context2d *context = ObjectWrap::Unwrap<Context2d>(args.This());
cairo_t *ctx = context->context();
int sx = 0
, sy = 0
, sw = img->width
, sh = img->height
, dx, dy, dw, dh;
// Arguments
switch (args.Length()) {
// img, sx, sy, sw, sh, dx, dy, dw, dh
@ -546,8 +564,8 @@ Context2d::DrawImage(const Arguments &args) {
case 3:
dx = args[1]->Int32Value();
dy = args[2]->Int32Value();
dw = img->width;
dh = img->height;
dw = sw;
dh = sh;
break;
default:
return ThrowException(Exception::TypeError(String::New("invalid arguments")));
@ -559,7 +577,7 @@ Context2d::DrawImage(const Arguments &args) {
// Source surface
// TODO: only works with cairo >= 1.10.0
cairo_surface_t *src = cairo_surface_create_for_rectangle(
img->surface()
surface
, sx
, sy
, sw

Loading…
Cancel
Save