Exemplo n.º 1
0
static VALUE
gdkregion_spans_intersect_foreach(VALUE self, VALUE spans, VALUE sorted)
{
    int i;
    GdkSpan* gspans = ALLOCA_N(GdkSpan, RARRAY_LEN(spans));
    volatile VALUE func = rb_block_proc();

    G_RELATIVE(self, func);
    for (i = 0; i < RARRAY_LEN(spans); i++) {
        gspans[i].x = NUM2INT(RARRAY_PTR(RARRAY_PTR(spans)[i])[0]);
        gspans[i].y = NUM2INT(RARRAY_PTR(RARRAY_PTR(spans)[i])[1]);
        gspans[i].width = NUM2INT(RARRAY_PTR(RARRAY_PTR(spans)[i])[2]);
    }
    gdk_region_spans_intersect_foreach(_SELF(self),
                                       gspans, RARRAY_LEN(spans), RVAL2CBOOL(sorted),
                                       (GdkSpanFunc)gdkregion_span_func, (gpointer)func);
    return self;
}
Exemplo n.º 2
0
static VALUE
rg_spans_intersect_each(VALUE self, VALUE rbspans, VALUE rbsorted)
{
    GdkRegion *region = _SELF(self);
    gboolean sorted = RVAL2CBOOL(rbsorted);
    VALUE func = rb_block_proc();
    long n;
    GdkSpan *spans;

    G_RELATIVE(self, func);

    spans = RVAL2GDKSPANS(rbspans, &n);

    gdk_region_spans_intersect_foreach(region,
                                       spans,
                                       n,
                                       sorted,
                                       (GdkSpanFunc)gdkregion_span_func,
                                       (gpointer)func);

    g_free(spans);

    return self;
}