75
75
JS_SET_RVAL(context, vp, BOOLEAN_TO_JSVAL(ret)); \
76
76
_GJS_CAIRO_CONTEXT_DEFINE_FUNC_END
78
#define _GJS_CAIRO_CONTEXT_DEFINE_FUNC2FFAFF(method, cfunc, n1, n2) \
79
_GJS_CAIRO_CONTEXT_DEFINE_FUNC_BEGIN(method) \
81
if (!gjs_parse_args(context, #method, "ff", argc, JS_ARGV(context, vp), \
82
#n1, &arg1, #n2, &arg2)) \
84
cr = gjs_cairo_context_get_context(context, obj); \
85
cfunc(cr, &arg1, &arg2); \
86
if (cairo_status(cr) == CAIRO_STATUS_SUCCESS) { \
87
JSObject *array = JS_NewArrayObject(context, 0, NULL); \
91
if (!JS_NewNumberValue(context, arg1, &r)) return JS_FALSE; \
92
if (!JS_SetElement(context, array, 0, &r)) return JS_FALSE; \
93
if (!JS_NewNumberValue(context, arg2, &r)) return JS_FALSE; \
94
if (!JS_SetElement(context, array, 1, &r)) return JS_FALSE; \
95
JS_SET_RVAL(context, vp, OBJECT_TO_JSVAL(array)); \
97
_GJS_CAIRO_CONTEXT_DEFINE_FUNC_END
78
99
#define _GJS_CAIRO_CONTEXT_DEFINE_FUNC0AFF(method, cfunc) \
79
100
_GJS_CAIRO_CONTEXT_DEFINE_FUNC_BEGIN(method) \
80
101
double arg1, arg2; \
81
102
_GJS_CAIRO_CONTEXT_CHECK_NO_ARGS(method) \
82
103
cr = gjs_cairo_context_get_context(context, obj); \
83
104
cfunc(cr, &arg1, &arg2); \
105
if (cairo_status(cr) == CAIRO_STATUS_SUCCESS) { \
85
106
JSObject *array = JS_NewArrayObject(context, 0, NULL); \
87
108
return JS_FALSE; \
317
338
_GJS_CAIRO_CONTEXT_DEFINE_FUNC0AFFFF(clipExtents, cairo_clip_extents)
318
339
_GJS_CAIRO_CONTEXT_DEFINE_FUNC0(closePath, cairo_close_path)
319
340
_GJS_CAIRO_CONTEXT_DEFINE_FUNC0(copyPage, cairo_copy_page)
320
_GJS_CAIRO_CONTEXT_DEFINE_FUNC0AFF(deviceToUser, cairo_device_to_user)
321
_GJS_CAIRO_CONTEXT_DEFINE_FUNC0AFF(deviceToUserDistance, cairo_device_to_user_distance)
341
_GJS_CAIRO_CONTEXT_DEFINE_FUNC2FFAFF(deviceToUser, cairo_device_to_user, "x", "y")
342
_GJS_CAIRO_CONTEXT_DEFINE_FUNC2FFAFF(deviceToUserDistance, cairo_device_to_user_distance, "x", "y")
322
343
_GJS_CAIRO_CONTEXT_DEFINE_FUNC0(fill, cairo_fill)
323
344
_GJS_CAIRO_CONTEXT_DEFINE_FUNC0(fillPreserve, cairo_fill_preserve)
324
345
_GJS_CAIRO_CONTEXT_DEFINE_FUNC0AFFFF(fillExtents, cairo_fill_extents)
377
398
_GJS_CAIRO_CONTEXT_DEFINE_FUNC0(strokePreserve, cairo_stroke_preserve)
378
399
_GJS_CAIRO_CONTEXT_DEFINE_FUNC0AFFFF(strokeExtents, cairo_stroke_extents)
379
400
_GJS_CAIRO_CONTEXT_DEFINE_FUNC2(translate, cairo_translate, "ff", double, tx, double, ty)
380
_GJS_CAIRO_CONTEXT_DEFINE_FUNC0AFF(userToDevice, cairo_user_to_device)
381
_GJS_CAIRO_CONTEXT_DEFINE_FUNC0AFF(userToDeviceDistance, cairo_user_to_device_distance)
401
_GJS_CAIRO_CONTEXT_DEFINE_FUNC2FFAFF(userToDevice, cairo_user_to_device, "x", "y")
402
_GJS_CAIRO_CONTEXT_DEFINE_FUNC2FFAFF(userToDeviceDistance, cairo_user_to_device_distance, "x", "y")
538
setDash_func(JSContext *context,
542
jsval *argv = JS_ARGV(context, vp);
543
JSObject *obj = JS_THIS_OBJECT(context, vp);
548
JSBool retval = JS_FALSE;
550
GArray *dashes_c = NULL;
552
if (!gjs_parse_args(context, "setDash", "of", argc, argv,
553
"dashes", &dashes, "offset", &offset))
556
JS_AddObjectRoot(context, &dashes);
558
if (!JS_IsArrayObject(context, dashes)) {
559
gjs_throw(context, "dashes must be an array");
563
if (!JS_GetArrayLength(context, dashes, &len)) {
564
gjs_throw(context, "Can't get length of dashes");
568
dashes_c = g_array_sized_new (FALSE, FALSE, sizeof(double), len);
569
for (i = 0; i < len; ++i) {
574
if (!JS_GetElement(context, dashes, i, &elem)) {
577
if (elem == JSVAL_VOID)
580
if (!JS_ValueToNumber(context, elem, &b))
583
gjs_throw(context, "Dash value must be positive");
587
g_array_append_val(dashes_c, b);
590
cr = gjs_cairo_context_get_context(context, obj);
591
cairo_set_dash(cr, (double*)dashes_c->data, dashes_c->len, offset);
592
JS_SET_RVAL(context, vp, JSVAL_VOID);
595
if (dashes_c != NULL)
596
g_array_free (dashes_c, TRUE);
597
JS_RemoveObjectRoot(context, &dashes);
517
602
setSource_func(JSContext *context,
833
918
{ "scale", (JSNative)scale_func, 0, JSFUN_FAST_NATIVE },
834
919
{ "selectFontFace", (JSNative)selectFontFace_func, 0, JSFUN_FAST_NATIVE },
835
920
{ "setAntialias", (JSNative)setAntialias_func, 0, JSFUN_FAST_NATIVE },
921
{ "setDash", (JSNative)setDash_func, 0, JSFUN_FAST_NATIVE },
839
924
// setFontOptions