Browse Source

Added drawImage(canvas) support. Closes #67

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

40
src/CanvasRenderingContext2d.cc

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

Loading…
Cancel
Save