|
|
@@ -244,16 +244,14 @@ static VALUE draw_line(VALUE self, VALUE x1, VALUE y1, VALUE x2, VALUE y2, VALUE |
|
|
|
return self; |
|
|
|
} |
|
|
|
|
|
|
|
static VALUE draw_polyline(VALUE self, VALUE x, VALUE y, VALUE ch) |
|
|
|
static VALUE draw_polyline(VALUE self, VALUE points, VALUE ch) |
|
|
|
{ |
|
|
|
int i, n; |
|
|
|
int *ax, *ay; |
|
|
|
|
|
|
|
n = RARRAY(x)->len; |
|
|
|
int error = 0; |
|
|
|
VALUE v, x, y; |
|
|
|
|
|
|
|
/* Ensure x and y have the same number of elements */ |
|
|
|
if(n != RARRAY(y)->len) |
|
|
|
rb_raise(rb_eArgError, "Arguments do not have the same number of elements"); |
|
|
|
n = RARRAY(points)->len; |
|
|
|
|
|
|
|
ax = (int*)malloc(n*sizeof(int)); |
|
|
|
if(!ax) |
|
|
@@ -268,8 +266,28 @@ static VALUE draw_polyline(VALUE self, VALUE x, VALUE y, VALUE ch) |
|
|
|
|
|
|
|
for(i=0; i<n; i++) |
|
|
|
{ |
|
|
|
ax[i] = NUM2INT(rb_ary_entry(x, i)); |
|
|
|
ay[i] = NUM2INT(rb_ary_entry(y, i)); |
|
|
|
v = rb_ary_entry(points, i); |
|
|
|
if((TYPE(v) == T_ARRAY) && (RARRAY(v)->len == 2)) |
|
|
|
{ |
|
|
|
x = rb_ary_entry(v,0); |
|
|
|
y = rb_ary_entry(v,1); |
|
|
|
if(rb_obj_is_kind_of(x, rb_cInteger) && |
|
|
|
rb_obj_is_kind_of(y, rb_cInteger)) |
|
|
|
{ |
|
|
|
ax[i] = NUM2INT(x); |
|
|
|
ay[i] = NUM2INT(y); |
|
|
|
} else |
|
|
|
error = 1; |
|
|
|
} |
|
|
|
else |
|
|
|
error = 1; |
|
|
|
} |
|
|
|
|
|
|
|
if(error) |
|
|
|
{ |
|
|
|
free(ax); |
|
|
|
free(ay); |
|
|
|
rb_raise(rb_eArgError, "Invalid list of points"); |
|
|
|
} |
|
|
|
|
|
|
|
n--; |
|
|
@@ -288,17 +306,14 @@ static VALUE draw_thin_line(VALUE self, VALUE x1, VALUE y1, VALUE x2, VALUE y2) |
|
|
|
return self; |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
static VALUE draw_thin_polyline(VALUE self, VALUE x, VALUE y) |
|
|
|
static VALUE draw_thin_polyline(VALUE self, VALUE points) |
|
|
|
{ |
|
|
|
int i, n; |
|
|
|
int *ax, *ay; |
|
|
|
|
|
|
|
n = RARRAY(x)->len; |
|
|
|
int error = 0; |
|
|
|
VALUE v, x, y; |
|
|
|
|
|
|
|
/* Ensure x and y have the same number of elements */ |
|
|
|
if(n != RARRAY(y)->len) |
|
|
|
rb_raise(rb_eArgError, "Arguments do not have the same number of elements"); |
|
|
|
n = RARRAY(points)->len; |
|
|
|
|
|
|
|
ax = (int*)malloc(n*sizeof(int)); |
|
|
|
if(!ax) |
|
|
@@ -313,8 +328,28 @@ static VALUE draw_thin_polyline(VALUE self, VALUE x, VALUE y) |
|
|
|
|
|
|
|
for(i=0; i<n; i++) |
|
|
|
{ |
|
|
|
ax[i] = NUM2INT(rb_ary_entry(x, i)); |
|
|
|
ay[i] = NUM2INT(rb_ary_entry(y, i)); |
|
|
|
v = rb_ary_entry(points, i); |
|
|
|
if((TYPE(v) == T_ARRAY) && (RARRAY(v)->len == 2)) |
|
|
|
{ |
|
|
|
x = rb_ary_entry(v,0); |
|
|
|
y = rb_ary_entry(v,1); |
|
|
|
if(rb_obj_is_kind_of(x, rb_cInteger) && |
|
|
|
rb_obj_is_kind_of(y, rb_cInteger)) |
|
|
|
{ |
|
|
|
ax[i] = NUM2INT(x); |
|
|
|
ay[i] = NUM2INT(y); |
|
|
|
} else |
|
|
|
error = 1; |
|
|
|
} |
|
|
|
else |
|
|
|
error = 1; |
|
|
|
} |
|
|
|
|
|
|
|
if(error) |
|
|
|
{ |
|
|
|
free(ax); |
|
|
|
free(ay); |
|
|
|
rb_raise(rb_eArgError, "Invalid list of points"); |
|
|
|
} |
|
|
|
|
|
|
|
n--; |
|
|
@@ -574,9 +609,9 @@ void Init_cucul_canvas(VALUE mCucul) |
|
|
|
rb_define_method(cCanvas, "stretch_right", stretch_right, 0); |
|
|
|
|
|
|
|
rb_define_method(cCanvas, "draw_line", draw_line, 5); |
|
|
|
rb_define_method(cCanvas, "draw_polyline", draw_polyline, 3); |
|
|
|
rb_define_method(cCanvas, "draw_polyline", draw_polyline, 2); |
|
|
|
rb_define_method(cCanvas, "draw_thin_line", draw_thin_line, 4); |
|
|
|
rb_define_method(cCanvas, "draw_thin_polyline", draw_thin_polyline, 2); |
|
|
|
rb_define_method(cCanvas, "draw_thin_polyline", draw_thin_polyline, 1); |
|
|
|
rb_define_method(cCanvas, "draw_circle", draw_circle, 4); |
|
|
|
rb_define_method(cCanvas, "draw_ellipse", draw_ellipse, 5); |
|
|
|
rb_define_method(cCanvas, "draw_thin_ellipse", draw_thin_ellipse, 4); |
|
|
|