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; }
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; }