From f9c322e9e6c25bee8f1877c862324f41f82dcd3f Mon Sep 17 00:00:00 2001 From: Matthew Mondor Date: Wed, 25 Oct 2006 19:32:24 +0000 Subject: [PATCH] Only remains fonts+text functions to add --- mmsoftware/js/classes/js_gd.c | 464 +++++++++++++++++++++++++++++++++++++++++- 1 file changed, 463 insertions(+), 1 deletion(-) diff --git a/mmsoftware/js/classes/js_gd.c b/mmsoftware/js/classes/js_gd.c index 005669d..18f8ccc 100644 --- a/mmsoftware/js/classes/js_gd.c +++ b/mmsoftware/js/classes/js_gd.c @@ -1,4 +1,4 @@ -/* $Id: js_gd.c,v 1.3 2006/10/24 21:44:09 mmondor Exp $ */ +/* $Id: js_gd.c,v 1.4 2006/10/25 19:32:24 mmondor Exp $ */ /* * Copyright (c) 2006, Matthew Mondor @@ -277,6 +277,28 @@ static JSBool gdimage_m_color_deallocate(JSContext *, JSObject *, uintN, static JSBool gdimage_m_color_transparent(JSContext *, JSObject *, uintN, jsval *, jsval *); +static JSBool gdimage_m_copy(JSContext *, JSObject *, uintN, jsval *, + jsval *); +static JSBool gdimage_m_copy_resized(JSContext *, JSObject *, uintN, jsval *, + jsval *); +static JSBool gdimage_m_copy_resampled(JSContext *, JSObject *, uintN, + jsval *, jsval *); +static JSBool gdimage_m_copy_rotated(JSContext *, JSObject *, uintN, jsval *, + jsval *); +static JSBool gdimage_m_copy_merge(JSContext *, JSObject *, uintN, jsval *, + jsval *); +static JSBool gdimage_m_copy_merge_gray(JSContext *, JSObject *, uintN, + jsval *, jsval *); +static JSBool gdimage_m_palette_copy(JSContext *, JSObject *, uintN, jsval *, + jsval *); +static JSBool gdimage_m_square_to_circle(JSContext *, JSObject *, uintN, + jsval *, jsval *); + +static JSBool gdimage_m_compare(JSContext *, JSObject *, uintN, jsval *, + jsval *); +static JSBool gdimage_m_interlace(JSContext *, JSObject *, uintN, jsval *, + jsval *); + /* @@ -343,6 +365,15 @@ static struct property_spec gd_sprops[] = { SP(gdEdged), SP(gdAlphaOpaque), SP(gdAlphaTransparent), + SP(GD_CMP_IMAGE), + SP(GD_CMP_NUM_COLORS), + SP(GD_CMP_COLOR), + SP(GD_CMP_SIZE_X), + SP(GD_CMP_SIZE_Y), + SP(GD_CMP_TRANSPARENT), + SP(GD_CMP_BACKGROUND), + SP(GD_CMP_INTERLACE), + SP(GD_CMP_TRUECOLOR), { NULL, 0 } }; @@ -445,6 +476,18 @@ static JSFunctionSpec gdimage_methods[] = { { "getTransparent", gdimage_m_get_transparent, 0, 0, 0 }, { "colorDeallocate", gdimage_m_color_deallocate, 1, 0, 0 }, { "colorTransparent", gdimage_m_color_transparent, 1, 0, 0 }, + + { "copy", gdimage_m_copy, 7, 0, 0 }, + { "copyResized", gdimage_m_copy_resized, 9, 0, 0 }, + { "copyResamped", gdimage_m_copy_resampled, 9, 0, 0 }, + { "copyRotated", gdimage_m_copy_rotated, 8, 0, 0 }, + { "copyMerge", gdimage_m_copy_merge, 8, 0, 0 }, + { "copyMergeGray", gdimage_m_copy_merge_gray, 8, 0, 0 }, + { "paletteCopy", gdimage_m_palette_copy, 1, 0, 0 }, + { "squareToCircle", gdimage_m_square_to_circle, 1, 0, 0 }, + + { "compare", gdimage_m_compare, 1, 0, 0 }, + { "interlace", gdimage_m_compare, 1, 0, 0 }, { NULL, NULL, 0, 0, 0 } }; @@ -3262,3 +3305,422 @@ gdimage_m_color_transparent(JSContext *cx, JSObject *obj, uintN argc, } +static JSBool +gdimage_m_copy(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, + jsval *rval) +{ + gdImagePtr src, dst; + JSObject *o; + int i; + + *rval = OBJECT_TO_JSVAL(NULL); + + if (argc != 7) { + QUEUE_EXCEPTION("Wrong number of argumens"); + return JS_FALSE; + } + if (!JSVAL_IS_OBJECT(argv[0])) { + QUEUE_EXCEPTION("Argument 1 not a GDImage object"); + return JS_FALSE; + } + o = JSVAL_TO_OBJECT(argv[0]); + if (!JS_InstanceOf(cx, o, &gdimage_class, NULL)) { + QUEUE_EXCEPTION("Argument 1 not a GDImage object"); + return JS_FALSE; + } + for (i = 1; i < 7; i++) { + if (!JSVAL_IS_INT(argv[i])) { + char str[256]; + + (void) snprintf(str, 255, + "Argument %d not an Integer", i + 1); + QUEUE_EXCEPTION(str); + return JS_FALSE; + } + } + + src = JS_GetInstancePrivate(cx, obj, &gdimage_class, NULL); + assert(src != NULL); + dst = JS_GetInstancePrivate(cx, o, &gdimage_class, NULL); + assert(dst != NULL); + + gdImageCopy(dst, src, JSVAL_TO_INT(argv[1]), JSVAL_TO_INT(argv[2]), + JSVAL_TO_INT(argv[3]), JSVAL_TO_INT(argv[4]), + JSVAL_TO_INT(argv[5]), JSVAL_TO_INT(argv[6])); + + return JS_TRUE; +} + +static JSBool +gdimage_m_copy_resized(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, + jsval *rval) +{ + gdImagePtr src, dst; + JSObject *o; + int i; + + *rval = OBJECT_TO_JSVAL(NULL); + + if (argc != 9) { + QUEUE_EXCEPTION("Wrong number of argumens"); + return JS_FALSE; + } + if (!JSVAL_IS_OBJECT(argv[0])) { + QUEUE_EXCEPTION("Argument 1 not a GDImage object"); + return JS_FALSE; + } + o = JSVAL_TO_OBJECT(argv[0]); + if (!JS_InstanceOf(cx, o, &gdimage_class, NULL)) { + QUEUE_EXCEPTION("Argument 1 not a GDImage object"); + return JS_FALSE; + } + for (i = 1; i < 9; i++) { + if (!JSVAL_IS_INT(argv[i])) { + char str[256]; + + (void) snprintf(str, 255, + "Argument %d not an Integer", i + 1); + QUEUE_EXCEPTION(str); + return JS_FALSE; + } + } + + src = JS_GetInstancePrivate(cx, obj, &gdimage_class, NULL); + assert(src != NULL); + dst = JS_GetInstancePrivate(cx, o, &gdimage_class, NULL); + assert(dst != NULL); + + gdImageCopyResized(dst, src, JSVAL_TO_INT(argv[1]), + JSVAL_TO_INT(argv[2]), JSVAL_TO_INT(argv[3]), + JSVAL_TO_INT(argv[4]), JSVAL_TO_INT(argv[5]), + JSVAL_TO_INT(argv[6]), JSVAL_TO_INT(argv[7]), + JSVAL_TO_INT(argv[8])); + + return JS_TRUE; +} + +static JSBool +gdimage_m_copy_resampled(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, + jsval *rval) +{ + gdImagePtr src, dst; + JSObject *o; + int i; + + *rval = OBJECT_TO_JSVAL(NULL); + + if (argc != 9) { + QUEUE_EXCEPTION("Wrong number of argumens"); + return JS_FALSE; + } + if (!JSVAL_IS_OBJECT(argv[0])) { + QUEUE_EXCEPTION("Argument 1 not a GDImage object"); + return JS_FALSE; + } + o = JSVAL_TO_OBJECT(argv[0]); + if (!JS_InstanceOf(cx, o, &gdimage_class, NULL)) { + QUEUE_EXCEPTION("Argument 1 not a GDImage object"); + return JS_FALSE; + } + for (i = 1; i < 9; i++) { + if (!JSVAL_IS_INT(argv[i])) { + char str[256]; + + (void) snprintf(str, 255, + "Argument %d not an Integer", i + 1); + QUEUE_EXCEPTION(str); + return JS_FALSE; + } + } + + src = JS_GetInstancePrivate(cx, obj, &gdimage_class, NULL); + assert(src != NULL); + dst = JS_GetInstancePrivate(cx, o, &gdimage_class, NULL); + assert(dst != NULL); + + gdImageCopyResampled(dst, src, JSVAL_TO_INT(argv[1]), + JSVAL_TO_INT(argv[2]), JSVAL_TO_INT(argv[3]), + JSVAL_TO_INT(argv[4]), JSVAL_TO_INT(argv[5]), + JSVAL_TO_INT(argv[6]), JSVAL_TO_INT(argv[7]), + JSVAL_TO_INT(argv[8])); + + return JS_TRUE; +} + +static JSBool +gdimage_m_copy_rotated(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, + jsval *rval) +{ + gdImagePtr src, dst; + JSObject *o; + int i; + jsdouble dstx, dsty; + + *rval = OBJECT_TO_JSVAL(NULL); + + if (argc != 8) { + QUEUE_EXCEPTION("Wrong number of argumens"); + return JS_FALSE; + } + if (!JSVAL_IS_OBJECT(argv[0])) { + QUEUE_EXCEPTION("Argument 1 not a GDImage object"); + return JS_FALSE; + } + o = JSVAL_TO_OBJECT(argv[0]); + if (!JS_InstanceOf(cx, o, &gdimage_class, NULL)) { + QUEUE_EXCEPTION("Argument 1 not a GDImage object"); + return JS_FALSE; + } + if (!JSVAL_IS_NUMBER(argv[1]) || + !JS_ValueToNumber(cx, argv[1], &dstx)) { + QUEUE_EXCEPTION("Argument 2 not a Number"); + return JS_FALSE; + } + if (!JSVAL_IS_NUMBER(argv[2]) || + !JS_ValueToNumber(cx, argv[2], &dsty)) { + QUEUE_EXCEPTION("Argument 3 not a Number"); + return JS_FALSE; + } + for (i = 3; i < 8; i++) { + if (!JSVAL_IS_INT(argv[i])) { + char str[256]; + + (void) snprintf(str, 255, + "Argument %d not an Integer", i + 1); + QUEUE_EXCEPTION(str); + return JS_FALSE; + } + } + + src = JS_GetInstancePrivate(cx, obj, &gdimage_class, NULL); + assert(src != NULL); + dst = JS_GetInstancePrivate(cx, o, &gdimage_class, NULL); + assert(dst != NULL); + + gdImageCopyRotated(dst, src, (double)dstx, (double)dsty, + JSVAL_TO_INT(argv[3]), JSVAL_TO_INT(argv[4]), + JSVAL_TO_INT(argv[5]), JSVAL_TO_INT(argv[6]), + JSVAL_TO_INT(argv[7])); + + return JS_TRUE; +} + +static JSBool +gdimage_m_copy_merge(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, + jsval *rval) +{ + gdImagePtr src, dst; + JSObject *o; + int i; + + *rval = OBJECT_TO_JSVAL(NULL); + + if (argc != 8) { + QUEUE_EXCEPTION("Wrong number of argumens"); + return JS_FALSE; + } + if (!JSVAL_IS_OBJECT(argv[0])) { + QUEUE_EXCEPTION("Argument 1 not a GDImage object"); + return JS_FALSE; + } + o = JSVAL_TO_OBJECT(argv[0]); + if (!JS_InstanceOf(cx, o, &gdimage_class, NULL)) { + QUEUE_EXCEPTION("Argument 1 not a GDImage object"); + return JS_FALSE; + } + for (i = 1; i < 8; i++) { + if (!JSVAL_IS_INT(argv[i])) { + char str[256]; + + (void) snprintf(str, 255, + "Argument %d not an Integer", i + 1); + QUEUE_EXCEPTION(str); + return JS_FALSE; + } + } + + src = JS_GetInstancePrivate(cx, obj, &gdimage_class, NULL); + assert(src != NULL); + dst = JS_GetInstancePrivate(cx, o, &gdimage_class, NULL); + assert(dst != NULL); + + gdImageCopyMerge(dst, src, JSVAL_TO_INT(argv[1]), + JSVAL_TO_INT(argv[2]), JSVAL_TO_INT(argv[3]), + JSVAL_TO_INT(argv[4]), JSVAL_TO_INT(argv[5]), + JSVAL_TO_INT(argv[6]), JSVAL_TO_INT(argv[7])); + + return JS_TRUE; +} + +static JSBool +gdimage_m_copy_merge_gray(JSContext *cx, JSObject *obj, uintN argc, + jsval *argv, jsval *rval) +{ + gdImagePtr src, dst; + JSObject *o; + int i; + + *rval = OBJECT_TO_JSVAL(NULL); + + if (argc != 8) { + QUEUE_EXCEPTION("Wrong number of argumens"); + return JS_FALSE; + } + if (!JSVAL_IS_OBJECT(argv[0])) { + QUEUE_EXCEPTION("Argument 1 not a GDImage object"); + return JS_FALSE; + } + o = JSVAL_TO_OBJECT(argv[0]); + if (!JS_InstanceOf(cx, o, &gdimage_class, NULL)) { + QUEUE_EXCEPTION("Argument 1 not a GDImage object"); + return JS_FALSE; + } + for (i = 1; i < 8; i++) { + if (!JSVAL_IS_INT(argv[i])) { + char str[256]; + + (void) snprintf(str, 255, + "Argument %d not an Integer", i + 1); + QUEUE_EXCEPTION(str); + return JS_FALSE; + } + } + + src = JS_GetInstancePrivate(cx, obj, &gdimage_class, NULL); + assert(src != NULL); + dst = JS_GetInstancePrivate(cx, o, &gdimage_class, NULL); + assert(dst != NULL); + + gdImageCopyMergeGray(dst, src, JSVAL_TO_INT(argv[1]), + JSVAL_TO_INT(argv[2]), JSVAL_TO_INT(argv[3]), + JSVAL_TO_INT(argv[4]), JSVAL_TO_INT(argv[5]), + JSVAL_TO_INT(argv[6]), JSVAL_TO_INT(argv[7])); + + return JS_TRUE; +} + +static JSBool +gdimage_m_palette_copy(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, + jsval *rval) +{ + gdImagePtr src, dst; + JSObject *o; + + *rval = OBJECT_TO_JSVAL(NULL); + + if (argc != 1) { + QUEUE_EXCEPTION("Wrong number of argumens"); + return JS_FALSE; + } + if (!JSVAL_IS_OBJECT(argv[0])) { + QUEUE_EXCEPTION("Argument 1 not a GDImage object"); + return JS_FALSE; + } + o = JSVAL_TO_OBJECT(argv[0]); + if (!JS_InstanceOf(cx, o, &gdimage_class, NULL)) { + QUEUE_EXCEPTION("Argument 1 not a GDImage object"); + return JS_FALSE; + } + + src = JS_GetInstancePrivate(cx, obj, &gdimage_class, NULL); + assert(src != NULL); + dst = JS_GetInstancePrivate(cx, o, &gdimage_class, NULL); + assert(dst != NULL); + + gdImagePaletteCopy(dst, src); + + return JS_TRUE; +} + +static JSBool +gdimage_m_square_to_circle(JSContext *cx, JSObject *obj, uintN argc, + jsval *argv, jsval *rval) +{ + gdImagePtr img; + + *rval = OBJECT_TO_JSVAL(NULL); + + if (argc != 1) { + QUEUE_EXCEPTION("Wrong number of argumens"); + return JS_FALSE; + } + if (!JSVAL_IS_INT(argv[0])) { + QUEUE_EXCEPTION("Argument 1 not an Integer"); + return JS_FALSE; + } + + img = JS_GetInstancePrivate(cx, obj, &gdimage_class, NULL); + assert(img != NULL); + + gdImageSquareToCircle(img, JSVAL_TO_INT(argv[0])); + + return JS_TRUE; +} + + +/* + * Like the C function, returns a bitmap which may be compared against the + * GD.GD_CMP_* bits. + */ +static JSBool +gdimage_m_compare(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, + jsval *rval) +{ + gdImagePtr img1, img2; + JSObject *o; + int v; + + if (argc != 1) { + QUEUE_EXCEPTION("Wrong number of argumens"); + goto err; + } + if (!JSVAL_IS_OBJECT(argv[0])) { + QUEUE_EXCEPTION("Argument 1 not a GDImage object"); + goto err; + } + o = JSVAL_TO_OBJECT(argv[0]); + if (!JS_InstanceOf(cx, o, &gdimage_class, NULL)) { + QUEUE_EXCEPTION("Argument 1 not a GDImage object"); + goto err; + } + + img1 = JS_GetInstancePrivate(cx, obj, &gdimage_class, NULL); + assert(img1 != NULL); + img2 = JS_GetInstancePrivate(cx, o, &gdimage_class, NULL); + assert(img2 != NULL); + + v = gdImageCompare(img1, img2); + *rval = INT_TO_JSVAL(v); + + return JS_TRUE; + +err: + *rval = OBJECT_TO_JSVAL(NULL); + + return JS_FALSE; +} + +static JSBool +gdimage_m_interlace(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, + jsval *rval) +{ + gdImagePtr img; + + *rval = OBJECT_TO_JSVAL(NULL); + + if (argc != 1) { + QUEUE_EXCEPTION("Wrong number of argumens"); + return JS_FALSE; + } + if (!JSVAL_IS_BOOLEAN(argv[0])) { + QUEUE_EXCEPTION("Argument 1 not a Boolean"); + return JS_FALSE; + } + + img = JS_GetInstancePrivate(cx, obj, &gdimage_class, NULL); + assert(img != NULL); + + gdImageInterlace(img, (int)JSVAL_TO_BOOLEAN(argv[0])); + + return JS_TRUE; +} -- 2.9.0