-/* $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
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 *,
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 *);
{ "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 },
{ "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 }
};
return JS_FALSE;
}
+
static JSBool
gdimage_m_set_pixel(JSContext *cx, JSObject *obj, uintN argc, jsval *argv,
jsval *rval)
}
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;
/* 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;
}
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;
/* 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;
}
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;
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;
}
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;
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;
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;
}
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;
}
+
+