~jbicha/ubuntu/oneiric/gjs/1.29.18

« back to all changes in this revision

Viewing changes to modules/cairo-context.c

  • Committer: Bazaar Package Importer
  • Author(s): Laurent Bigonville
  • Date: 2011-02-06 13:01:02 UTC
  • mfrom: (1.3.10 experimental)
  • Revision ID: james.westby@ubuntu.com-20110206130102-69xpqq0gql9fob01
Tags: 0.7.10-1
* New upstream release.
* debian/control.in:
  - Drop build-depend on libmozjs-dev
  - Make libgjs-dev depend on xulrunner-dev and libdbus-1-dev

Show diffs side-by-side

added added

removed removed

Lines of Context:
75
75
    JS_SET_RVAL(context, vp, BOOLEAN_TO_JSVAL(ret));                       \
76
76
_GJS_CAIRO_CONTEXT_DEFINE_FUNC_END
77
77
 
 
78
#define _GJS_CAIRO_CONTEXT_DEFINE_FUNC2FFAFF(method, cfunc, n1, n2)        \
 
79
_GJS_CAIRO_CONTEXT_DEFINE_FUNC_BEGIN(method)                               \
 
80
    double arg1, arg2;                                                     \
 
81
    if (!gjs_parse_args(context, #method, "ff", argc, JS_ARGV(context, vp), \
 
82
                        #n1, &arg1, #n2, &arg2))                           \
 
83
        return JS_FALSE;                                                   \
 
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);               \
 
88
      if (!array)                                                          \
 
89
        return JS_FALSE;                                                   \
 
90
      jsval r;                                                             \
 
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));                    \
 
96
    }                                                                      \
 
97
_GJS_CAIRO_CONTEXT_DEFINE_FUNC_END
 
98
 
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);                                               \
84
 
    {                                                                      \
 
105
    if (cairo_status(cr) == CAIRO_STATUS_SUCCESS) {                        \
85
106
      JSObject *array = JS_NewArrayObject(context, 0, NULL);               \
86
107
      if (!array)                                                          \
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")
382
403
 
383
404
 
384
405
static JSBool
514
535
}
515
536
 
516
537
static JSBool
 
538
setDash_func(JSContext *context,
 
539
             uintN      argc,
 
540
             jsval     *vp)
 
541
{
 
542
    jsval *argv = JS_ARGV(context, vp);
 
543
    JSObject *obj = JS_THIS_OBJECT(context, vp);
 
544
    guint i;
 
545
    cairo_t *cr;
 
546
    JSObject *dashes;
 
547
    double offset;
 
548
    JSBool retval = JS_FALSE;
 
549
    guint len;
 
550
    GArray *dashes_c = NULL;
 
551
 
 
552
    if (!gjs_parse_args(context, "setDash", "of", argc, argv,
 
553
                        "dashes", &dashes, "offset", &offset))
 
554
        return JS_FALSE;
 
555
 
 
556
    JS_AddObjectRoot(context, &dashes);
 
557
 
 
558
    if (!JS_IsArrayObject(context, dashes)) {
 
559
        gjs_throw(context, "dashes must be an array");
 
560
        goto out;
 
561
    }
 
562
 
 
563
    if (!JS_GetArrayLength(context, dashes, &len)) {
 
564
        gjs_throw(context, "Can't get length of dashes");
 
565
        goto out;
 
566
    }
 
567
 
 
568
    dashes_c = g_array_sized_new (FALSE, FALSE, sizeof(double), len);
 
569
    for (i = 0; i < len; ++i) {
 
570
        jsval elem;
 
571
        double b;
 
572
 
 
573
        elem = JSVAL_VOID;
 
574
        if (!JS_GetElement(context, dashes, i, &elem)) {
 
575
            goto out;
 
576
        }
 
577
        if (elem == JSVAL_VOID)
 
578
            continue;
 
579
 
 
580
        if (!JS_ValueToNumber(context, elem, &b))
 
581
            goto out;
 
582
        if (b <= 0) {
 
583
            gjs_throw(context, "Dash value must be positive");
 
584
            goto out;
 
585
        }
 
586
 
 
587
        g_array_append_val(dashes_c, b);
 
588
    }
 
589
 
 
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);
 
593
    retval = JS_TRUE;
 
594
 out:
 
595
    if (dashes_c != NULL)
 
596
        g_array_free (dashes_c, TRUE);
 
597
    JS_RemoveObjectRoot(context, &dashes);
 
598
    return retval;
 
599
}
 
600
 
 
601
static JSBool
517
602
setSource_func(JSContext *context,
518
603
               uintN      argc,
519
604
               jsval     *vp)
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 },
836
 
    // setDash
 
921
    { "setDash", (JSNative)setDash_func, 0, JSFUN_FAST_NATIVE },
837
922
    // setFontFace
838
923
    // setFontMatrix
839
924
    // setFontOptions