*** empty log message ***
authorMatthew Mondor <mmondor@pulsar-zone.net>
Tue, 24 Oct 2006 21:44:09 +0000 (21:44 +0000)
committerMatthew Mondor <mmondor@pulsar-zone.net>
Tue, 24 Oct 2006 21:44:09 +0000 (21:44 +0000)
mmsoftware/js/classes/js_gd.c

index 7b3f626..005669d 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: js_gd.c,v 1.2 2006/10/24 20:29:26 mmondor Exp $ */
+/* $Id: js_gd.c,v 1.3 2006/10/24 21:44:09 mmondor Exp $ */
 
 /*
  * Copyright (c) 2006, Matthew Mondor
@@ -176,6 +176,7 @@ static JSBool       gdimage_m_truecolor_to_palette(JSContext *, JSObject *, uintN,
                    jsval *, jsval *);
 static JSBool  gdimage_m_create_palette_from_truecolor(JSContext *,
                    JSObject *, uintN, jsval *, jsval *);
+
 static JSBool  gdimage_m_set_pixel(JSContext *, JSObject *, uintN, jsval *,
                    jsval *);
 static JSBool  gdimage_m_primitive5_i(JSContext *, JSObject *, uintN, jsval *,
@@ -234,19 +235,47 @@ static JSBool     gdimage_m_get_pixel(JSContext *, JSObject *, uintN, jsval *,
                    jsval *);
 static JSBool  gdimage_m_bounds_safe(JSContext *, JSObject *, uintN, jsval *,
                    jsval *);
-static JSBool  gdimage_m_blue(JSContext *, JSObject *, uintN, jsval *,
-                   jsval *);
-static JSBool  gdimage_m_green(JSContext *, JSObject *, uintN, jsval *,
-                   jsval *);
-static JSBool  gdimage_m_red(JSContext *, JSObject *, uintN, jsval *,
-                   jsval *);
 static JSBool  gdimage_m_image_sx(JSContext *, JSObject *, uintN, jsval *,
                    jsval *);
 static JSBool  gdimage_m_image_sy(JSContext *, JSObject *, uintN, jsval *,
                    jsval *);
 
+static JSBool  gdimage_m_int_int3_i(JSContext *, JSObject *, uintN, jsval *,
+                   jsval *, int (*)(gdImagePtr, int, int, int));
+static JSBool  gdimage_m_int_int4_i(JSContext *, JSObject *, uintN, jsval *,
+                   jsval *, int (*)(gdImagePtr, int, int, int, int));
 static JSBool  gdimage_m_color_allocate(JSContext *, JSObject *, uintN,
                    jsval *, jsval *);
+static JSBool  gdimage_m_color_allocate_alpha(JSContext *, JSObject *, uintN,
+                   jsval *, jsval *);
+static JSBool  gdimage_m_color_closest(JSContext *, JSObject *, uintN,
+                   jsval *, jsval *);
+static JSBool  gdimage_m_color_closest_alpha(JSContext *, JSObject *, uintN,
+                   jsval *, jsval *);
+static JSBool  gdimage_m_color_closest_hwb(JSContext *, JSObject *, uintN,
+                   jsval *, jsval *);
+static JSBool  gdimage_m_color_exact(JSContext *, JSObject *, uintN, jsval *,
+                   jsval *);
+static JSBool  gdimage_m_color_resolve(JSContext *, JSObject *, uintN,
+                   jsval *, jsval *);
+static JSBool  gdimage_m_color_resolve_alpha(JSContext *, JSObject *, uintN,
+                   jsval *, jsval *);
+static JSBool  gdimage_m_colors_total(JSContext *, JSObject *, uintN, jsval *,
+                   jsval *);
+static JSBool  gdimage_m_red(JSContext *, JSObject *, uintN, jsval *,
+                   jsval *);
+static JSBool  gdimage_m_green(JSContext *, JSObject *, uintN, jsval *,
+                   jsval *);
+static JSBool  gdimage_m_blue(JSContext *, JSObject *, uintN, jsval *,
+                   jsval *);
+static JSBool  gdimage_m_get_interlaced(JSContext *, JSObject *, uintN,
+                   jsval *, jsval *);
+static JSBool  gdimage_m_get_transparent(JSContext *, JSObject *, uintN,
+                   jsval *, jsval *);
+static JSBool  gdimage_m_color_deallocate(JSContext *, JSObject *, uintN,
+                   jsval *, jsval *);
+static JSBool  gdimage_m_color_transparent(JSContext *, JSObject *, uintN,
+                   jsval *, jsval *);
 
 
 
@@ -369,6 +398,7 @@ static JSFunctionSpec gdimage_methods[] = {
        { "trueColorToPalette", gdimage_m_truecolor_to_palette, 2, 0, 0 },
        { "createPaletteFromTrueColor",
            gdimage_m_create_palette_from_truecolor, 2, 0, 0 },
+
        { "setPixel", gdimage_m_set_pixel, 3, 0, 0 },
        { "line", gdimage_m_line, 5, 0, 0 },
        { "dashedLine", gdimage_m_dashed_line, 5, 0, 0 },
@@ -396,13 +426,25 @@ static JSFunctionSpec gdimage_methods[] = {
        { "alpha", gdimage_m_alpha, 1, 0, 0 },
        { "getPixel", gdimage_m_get_pixel, 2, 0, 0 },
        { "boundsSafe", gdimage_m_bounds_safe, 2, 0, 0 },
-       { "blue", gdimage_m_blue, 1, 0, 0 },
-       { "green", gdimage_m_green, 1, 0, 0 },
-       { "red", gdimage_m_red, 1, 0, 0 },
        { "imageSX", gdimage_m_image_sx, 0, 0, 0 },
        { "imageSY", gdimage_m_image_sy, 0, 0, 0 },
 
        { "colorAllocate", gdimage_m_color_allocate, 3, 0, 0 },
+       { "colorAllocateAlpha", gdimage_m_color_allocate_alpha, 4, 0, 0 },
+       { "colorClosest", gdimage_m_color_closest, 3, 0, 0 },
+       { "colorClosestAlpha", gdimage_m_color_closest_alpha, 4, 0, 0 },
+       { "colorClosestHWB", gdimage_m_color_closest_hwb, 3, 0, 0 },
+       { "colorExact", gdimage_m_color_exact, 3, 0, 0 },
+       { "colorResolve", gdimage_m_color_resolve, 3, 0, 0 },
+       { "colorResolveAlpha", gdimage_m_color_resolve_alpha, 4, 0, 0 },
+       { "colorsTotal", gdimage_m_colors_total, 0, 0, 0 },
+       { "red", gdimage_m_red, 1, 0, 0 },
+       { "green", gdimage_m_green, 1, 0, 0 },
+       { "blue", gdimage_m_blue, 1, 0, 0 },
+       { "getInterlaced", gdimage_m_get_interlaced, 0, 0, 0 },
+       { "getTransparent", gdimage_m_get_transparent, 0, 0, 0 },
+       { "colorDeallocate", gdimage_m_color_deallocate, 1, 0, 0 },
+       { "colorTransparent", gdimage_m_color_transparent, 1, 0, 0 },
        { NULL, NULL, 0, 0, 0 }
 };
 
@@ -1894,6 +1936,7 @@ err:
        return JS_FALSE;
 }
 
+
 static JSBool
 gdimage_m_set_pixel(JSContext *cx, JSObject *obj, uintN argc, jsval *argv,
     jsval *rval)
@@ -2783,7 +2826,243 @@ err:
 }
 
 static JSBool
-gdimage_m_blue(JSContext *cx, JSObject *obj, uintN argc, jsval *argv,
+gdimage_m_image_sx(JSContext *cx, JSObject *obj, uintN argc, jsval *argv,
+    jsval *rval)
+{
+       gdImagePtr      img;
+       int             v;
+
+       if (argc != 0) {
+               QUEUE_EXCEPTION("Wrong number of arguments");
+               goto err;
+       }
+
+       img = JS_GetInstancePrivate(cx, obj, &gdimage_class, NULL);
+       assert(img != NULL);
+
+       /* A macro, so avoid side-effects */
+       v = gdImageSX(img);
+       *rval = INT_TO_JSVAL(v);
+
+       return JS_TRUE;
+
+err:
+       *rval = OBJECT_TO_JSVAL(NULL);
+
+       return JS_FALSE;
+}
+
+static JSBool
+gdimage_m_image_sy(JSContext *cx, JSObject *obj, uintN argc, jsval *argv,
+    jsval *rval)
+{
+       gdImagePtr      img;
+       int             v;
+
+       if (argc != 0) {
+               QUEUE_EXCEPTION("Wrong number of arguments");
+               goto err;
+       }
+
+       img = JS_GetInstancePrivate(cx, obj, &gdimage_class, NULL);
+       assert(img != NULL);
+
+       /* A macro, so avoid side-effects */
+       v = gdImageSY(img);
+       *rval = INT_TO_JSVAL(v);
+
+       return JS_TRUE;
+
+err:
+       *rval = OBJECT_TO_JSVAL(NULL);
+
+       return JS_FALSE;
+}
+
+
+static JSBool
+gdimage_m_int_int3_i(JSContext *cx, JSObject *obj, uintN argc, jsval *argv,
+    jsval *rval, int (*funcptr)(gdImagePtr, int, int, int))
+{
+       gdImagePtr      img;
+       int             col;
+
+       if (argc != 3) {
+               QUEUE_EXCEPTION("Wrong number of arguments");
+               goto err;
+       }
+       if (!JSVAL_IS_INT(argv[0])) {
+               QUEUE_EXCEPTION("Argument 1 not an Integer");
+               goto err;
+       }
+       if (!JSVAL_IS_INT(argv[1])) {
+               QUEUE_EXCEPTION("Argument 2 not an Integer");
+               goto err;
+       }
+       if (!JSVAL_IS_INT(argv[2])) {
+               QUEUE_EXCEPTION("Argument 3 not an Integer");
+               goto err;
+       }
+
+       img = JS_GetInstancePrivate(cx, obj, &gdimage_class, NULL);
+       assert(img != NULL);
+
+       col = funcptr(img, JSVAL_TO_INT(argv[0]), JSVAL_TO_INT(argv[1]),
+           JSVAL_TO_INT(argv[2]));
+       *rval = INT_TO_JSVAL(col);
+
+       return JS_TRUE;
+
+err:
+       *rval = OBJECT_TO_JSVAL(NULL);
+
+       return JS_FALSE;
+}
+
+static JSBool
+gdimage_m_int_int4_i(JSContext *cx, JSObject *obj, uintN argc, jsval *argv,
+    jsval *rval, int (*funcptr)(gdImagePtr, int, int, int, int))
+{
+       gdImagePtr      img;
+       int             col;
+
+       if (argc != 4) {
+               QUEUE_EXCEPTION("Wrong number of arguments");
+               goto err;
+       }
+       if (!JSVAL_IS_INT(argv[0])) {
+               QUEUE_EXCEPTION("Argument 1 not an Integer");
+               goto err;
+       }
+       if (!JSVAL_IS_INT(argv[1])) {
+               QUEUE_EXCEPTION("Argument 2 not an Integer");
+               goto err;
+       }
+       if (!JSVAL_IS_INT(argv[2])) {
+               QUEUE_EXCEPTION("Argument 3 not an Integer");
+               goto err;
+       }
+       if (!JSVAL_IS_INT(argv[3])) {
+               QUEUE_EXCEPTION("Argument 4 not an Integer");
+               goto err;
+       }
+
+       img = JS_GetInstancePrivate(cx, obj, &gdimage_class, NULL);
+       assert(img != NULL);
+
+       col = funcptr(img, JSVAL_TO_INT(argv[0]), JSVAL_TO_INT(argv[1]),
+           JSVAL_TO_INT(argv[2]), JSVAL_TO_INT(argv[3]));
+       *rval = INT_TO_JSVAL(col);
+
+       return JS_TRUE;
+
+err:
+       *rval = OBJECT_TO_JSVAL(NULL);
+
+       return JS_FALSE;
+}
+
+static JSBool
+gdimage_m_color_allocate(JSContext *cx, JSObject *obj, uintN argc, jsval *argv,
+    jsval *rval)
+{
+
+       return gdimage_m_int_int3_i(cx, obj, argc, argv, rval,
+           gdImageColorAllocate);
+}
+
+static JSBool
+gdimage_m_color_allocate_alpha(JSContext *cx, JSObject *obj, uintN argc,
+    jsval *argv, jsval *rval)
+{
+
+       return gdimage_m_int_int4_i(cx, obj, argc, argv, rval,
+           gdImageColorAllocateAlpha);
+}
+
+static JSBool
+gdimage_m_color_closest(JSContext *cx, JSObject *obj, uintN argc, jsval *argv,
+    jsval *rval)
+{
+
+       return gdimage_m_int_int3_i(cx, obj, argc, argv, rval,
+           gdImageColorClosest);
+}
+
+static JSBool
+gdimage_m_color_closest_alpha(JSContext *cx, JSObject *obj, uintN argc,
+    jsval *argv, jsval *rval)
+{
+
+       return gdimage_m_int_int4_i(cx, obj, argc, argv, rval,
+           gdImageColorClosestAlpha);
+}
+
+static JSBool
+gdimage_m_color_closest_hwb(JSContext *cx, JSObject *obj, uintN argc,
+    jsval *argv, jsval *rval)
+{
+
+       return gdimage_m_int_int3_i(cx, obj, argc, argv, rval,
+           gdImageColorClosestHWB);
+}
+
+static JSBool
+gdimage_m_color_exact(JSContext *cx, JSObject *obj, uintN argc, jsval *argv,
+    jsval *rval)
+{
+
+       return gdimage_m_int_int3_i(cx, obj, argc, argv, rval,
+           gdImageColorExact);
+}
+
+static JSBool
+gdimage_m_color_resolve(JSContext *cx, JSObject *obj, uintN argc, jsval *argv,
+    jsval *rval)
+{
+
+       return gdimage_m_int_int3_i(cx, obj, argc, argv, rval,
+           gdImageColorResolve);
+}
+
+static JSBool
+gdimage_m_color_resolve_alpha(JSContext *cx, JSObject *obj, uintN argc,
+    jsval *argv, jsval *rval)
+{
+
+       return gdimage_m_int_int4_i(cx, obj, argc, argv, rval,
+           gdImageColorResolveAlpha);
+}
+
+static JSBool
+gdimage_m_colors_total(JSContext *cx, JSObject *obj, uintN argc, jsval *argv,
+    jsval *rval)
+{
+       gdImagePtr      img;
+       int             v;
+
+       if (argc != 0) {
+               QUEUE_EXCEPTION("Wrong number of arguments");
+               goto err;
+       }
+
+       img = JS_GetInstancePrivate(cx, obj, &gdimage_class, NULL);
+       assert(img != NULL);
+
+       /* A macro, so avoid side-effects */
+       v = gdImageColorsTotal(img);
+       *rval = INT_TO_JSVAL(v);
+
+       return JS_TRUE;
+
+err:
+       *rval = OBJECT_TO_JSVAL(NULL);
+
+       return JS_FALSE;
+}
+
+static JSBool
+gdimage_m_red(JSContext *cx, JSObject *obj, uintN argc, jsval *argv,
     jsval *rval)
 {
        gdImagePtr      img;
@@ -2803,7 +3082,7 @@ gdimage_m_blue(JSContext *cx, JSObject *obj, uintN argc, jsval *argv,
 
        /* A macro, so avoid side-effects */
        v = JSVAL_TO_INT(argv[0]);
-       v = gdImageBlue(img, v);
+       v = gdImageRed(img, v);
        *rval = INT_TO_JSVAL(v);
 
        return JS_TRUE;
@@ -2847,7 +3126,7 @@ err:
 }
 
 static JSBool
-gdimage_m_red(JSContext *cx, JSObject *obj, uintN argc, jsval *argv,
+gdimage_m_blue(JSContext *cx, JSObject *obj, uintN argc, jsval *argv,
     jsval *rval)
 {
        gdImagePtr      img;
@@ -2867,7 +3146,7 @@ gdimage_m_red(JSContext *cx, JSObject *obj, uintN argc, jsval *argv,
 
        /* A macro, so avoid side-effects */
        v = JSVAL_TO_INT(argv[0]);
-       v = gdImageRed(img, v);
+       v = gdImageBlue(img, v);
        *rval = INT_TO_JSVAL(v);
 
        return JS_TRUE;
@@ -2879,7 +3158,7 @@ err:
 }
 
 static JSBool
-gdimage_m_image_sx(JSContext *cx, JSObject *obj, uintN argc, jsval *argv,
+gdimage_m_get_interlaced(JSContext *cx, JSObject *obj, uintN argc, jsval *argv,
     jsval *rval)
 {
        gdImagePtr      img;
@@ -2894,8 +3173,8 @@ gdimage_m_image_sx(JSContext *cx, JSObject *obj, uintN argc, jsval *argv,
        assert(img != NULL);
 
        /* A macro, so avoid side-effects */
-       v = gdImageSX(img);
-       *rval = INT_TO_JSVAL(v);
+       v = gdImageGetInterlaced(img);
+       *rval = BOOLEAN_TO_JSVAL((JSBool)v);
 
        return JS_TRUE;
 
@@ -2906,8 +3185,8 @@ err:
 }
 
 static JSBool
-gdimage_m_image_sy(JSContext *cx, JSObject *obj, uintN argc, jsval *argv,
-    jsval *rval)
+gdimage_m_get_transparent(JSContext *cx, JSObject *obj, uintN argc,
+    jsval *argv, jsval *rval)
 {
        gdImagePtr      img;
        int             v;
@@ -2921,8 +3200,8 @@ gdimage_m_image_sy(JSContext *cx, JSObject *obj, uintN argc, jsval *argv,
        assert(img != NULL);
 
        /* A macro, so avoid side-effects */
-       v = gdImageSY(img);
-       *rval = INT_TO_JSVAL(v);
+       v = gdImageGetTransparent(img);
+       *rval = BOOLEAN_TO_JSVAL((JSBool)v);
 
        return JS_TRUE;
 
@@ -2932,17 +3211,15 @@ err:
        return JS_FALSE;
 }
 
-
 static JSBool
-gdimage_m_color_allocate(JSContext *cx, JSObject *obj, uintN argc, jsval *argv,
-    jsval *rval)
+gdimage_m_color_deallocate(JSContext *cx, JSObject *obj, uintN argc,
+    jsval *argv, jsval *rval)
 {
        gdImagePtr      img;
-       int             col;
 
        *rval = OBJECT_TO_JSVAL(NULL);
 
-       if (argc != 3) {
+       if (argc != 1) {
                QUEUE_EXCEPTION("Wrong number of arguments");
                return JS_FALSE;
        }
@@ -2950,21 +3227,38 @@ gdimage_m_color_allocate(JSContext *cx, JSObject *obj, uintN argc, jsval *argv,
                QUEUE_EXCEPTION("Argument 1 not an Integer");
                return JS_FALSE;
        }
-       if (!JSVAL_IS_INT(argv[1])) {
-               QUEUE_EXCEPTION("Argument 2 not an Integer");
+
+       img = JS_GetInstancePrivate(cx, obj, &gdimage_class, NULL);
+       assert(img != NULL);
+
+       gdImageColorDeallocate(img, JSVAL_TO_INT(argv[0]));
+
+       return JS_TRUE;
+}
+
+static JSBool
+gdimage_m_color_transparent(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 arguments");
                return JS_FALSE;
        }
-       if (!JSVAL_IS_INT(argv[2])) {
-               QUEUE_EXCEPTION("Argument 3 not an Integer");
+       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);
 
-       col = gdImageColorAllocate(img, JSVAL_TO_INT(argv[0]),
-           JSVAL_TO_INT(argv[1]), JSVAL_TO_INT(argv[2]));
-       *rval = INT_TO_JSVAL(col);
+       gdImageColorTransparent(img, JSVAL_TO_INT(argv[0]));
 
        return JS_TRUE;
 }
+
+