| @@ -4,7 +4,7 @@ This a Ruby binding for libcucul, libcaca will be added later. | |||
| There is no real documentation but "methods" on any object should help you :) | |||
| The objects available for now are : | |||
| The objects available are : | |||
| - Cucul::Canvas (functions that have a cucul_canvas_t* as first argument) | |||
| @@ -13,6 +13,8 @@ The objects available for now are : | |||
| - Cucul::Font (functions that have a cucul_font_t* as first argument) | |||
| * The constructor can currently only accept the name of a builtin font | |||
| The character set conversion functions are not available yet in the binding. | |||
| I tried to follow Ruby spirit meaning that : | |||
| - most of the methods return self | |||
| - the methods set_foo with only an argument are also available as foo= | |||
| @@ -68,8 +70,11 @@ Cucul::Font.ancestors[1].instance_methods | |||
| \code | |||
| irb(main):006:0> Cucul::Dither.instance_methods.sort - | |||
| Cucul::Dither.ancestors[1].instance_methods => ["brightness=", | |||
| "contrast=", "gamma=", "palette=", "set_brightness", "set_contrast", | |||
| Cucul::Dither.ancestors[1].instance_methods | |||
| => ["algorithm=", "algorithm_list", "antialias=", "antialias_list", | |||
| "brightness=", "charset=", "charset_list", "color=", "color_list", | |||
| "contrast=", "gamma=", "palette=", "set_algorithm", "set_antialias", | |||
| "set_brightness", "set_charset", "set_color", "set_contrast", | |||
| "set_gamma", "set_palette"] | |||
| \endcode | |||
| @@ -3,4 +3,46 @@ | |||
| #define _SELF (DATA_PTR(self)) | |||
| #define get_singleton_double_list(x) \ | |||
| static VALUE x##_list(void) \ | |||
| { \ | |||
| VALUE ary, ary2; \ | |||
| char const* const* list; \ | |||
| \ | |||
| list = cucul_get_##x##_list(); \ | |||
| ary = rb_ary_new(); \ | |||
| while (*list != NULL) \ | |||
| { \ | |||
| ary2 = rb_ary_new(); \ | |||
| rb_ary_push(ary2, rb_str_new2(*list)); \ | |||
| list++; \ | |||
| rb_ary_push(ary2, rb_str_new2(*list)); \ | |||
| list++; \ | |||
| rb_ary_push(ary, ary2); \ | |||
| } \ | |||
| \ | |||
| return ary; \ | |||
| } | |||
| #define get_double_list(x) \ | |||
| static VALUE x##_list(VALUE self) \ | |||
| { \ | |||
| VALUE ary, ary2; \ | |||
| char const* const* list; \ | |||
| \ | |||
| list = cucul_get_##x##_list(_SELF); \ | |||
| ary = rb_ary_new(); \ | |||
| while (*list != NULL) \ | |||
| { \ | |||
| ary2 = rb_ary_new(); \ | |||
| rb_ary_push(ary2, rb_str_new2(*list)); \ | |||
| list++; \ | |||
| rb_ary_push(ary2, rb_str_new2(*list)); \ | |||
| list++; \ | |||
| rb_ary_push(ary, ary2); \ | |||
| } \ | |||
| \ | |||
| return ary; \ | |||
| } | |||
| #endif | |||
| @@ -12,6 +12,7 @@ | |||
| #include <ruby.h> | |||
| #include <cucul.h> | |||
| #include <errno.h> | |||
| #include "cucul-dither.h" | |||
| #include "cucul-font.h" | |||
| #include "common.h" | |||
| @@ -438,6 +439,16 @@ static VALUE fill_triangle(VALUE self, VALUE x1, VALUE y1, VALUE x2, VALUE y2, V | |||
| return self; | |||
| } | |||
| static VALUE dither_bitmap(VALUE self, VALUE x, VALUE y, VALUE w, VALUE h, VALUE d, VALUE pixels) | |||
| { | |||
| if(CLASS_OF(d) != cDither) | |||
| rb_raise(rb_eArgError, "d is not a Cucul::Dither"); | |||
| Check_Type(pixels, T_STRING); | |||
| cucul_dither_bitmap(_SELF, NUM2INT(x), NUM2INT(y), NUM2INT(w), NUM2INT(h), DATA_PTR(d), StringValuePtr(pixels)); | |||
| return self; | |||
| } | |||
| /****/ | |||
| get_int(frame_count) | |||
| @@ -549,51 +560,8 @@ static VALUE export_memory(VALUE self, VALUE format) | |||
| return ret; | |||
| } | |||
| static VALUE export_list(void) | |||
| { | |||
| VALUE ary, ary2; | |||
| char const* const* list; | |||
| list = cucul_get_export_list(); | |||
| ary = rb_ary_new(); | |||
| while (*list != NULL) | |||
| { | |||
| ary2 = rb_ary_new(); | |||
| rb_ary_push(ary2, rb_str_new2(*list)); | |||
| list++; | |||
| rb_ary_push(ary2, rb_str_new2(*list)); | |||
| list++; | |||
| rb_ary_push(ary, ary2); | |||
| } | |||
| return ary; | |||
| } | |||
| static VALUE import_list(void) | |||
| { | |||
| VALUE ary, ary2; | |||
| char const* const* list; | |||
| list = cucul_get_import_list(); | |||
| ary = rb_ary_new(); | |||
| while (*list != NULL) | |||
| { | |||
| ary2 = rb_ary_new(); | |||
| rb_ary_push(ary2, rb_str_new2(*list)); | |||
| list++; | |||
| rb_ary_push(ary2, rb_str_new2(*list)); | |||
| list++; | |||
| rb_ary_push(ary, ary2); | |||
| } | |||
| return ary; | |||
| } | |||
| get_singleton_double_list(export) | |||
| get_singleton_double_list(import) | |||
| /****/ | |||
| @@ -658,6 +626,7 @@ void Init_cucul_canvas(VALUE mCucul) | |||
| rb_define_method(cCanvas, "draw_triangle", draw_triangle, 7); | |||
| rb_define_method(cCanvas, "draw_thin_triangle", draw_thin_triangle, 6); | |||
| rb_define_method(cCanvas, "fill_triangle", fill_triangle, 7); | |||
| rb_define_method(cCanvas, "dither_bitmap", dither_bitmap, 6); | |||
| rb_define_method(cCanvas, "frame_count", get_frame_count, 0); | |||
| rb_define_method(cCanvas, "frame=", set_frame, 1); | |||
| @@ -14,7 +14,7 @@ | |||
| #include <errno.h> | |||
| #include "common.h" | |||
| VALUE cFont; | |||
| VALUE cDither; | |||
| void dither_free(void *dither) | |||
| { | |||
| @@ -139,7 +139,7 @@ static VALUE set_dither_palette2(VALUE self, VALUE palette) | |||
| } | |||
| #define set_float(x) \ | |||
| static VALUE set_##x (VALUE self, VALUE x) \ | |||
| static VALUE set_##x(VALUE self, VALUE x) \ | |||
| { \ | |||
| if(cucul_set_dither_##x(_SELF, (float)NUM2DBL(x))<0)\ | |||
| rb_raise(rb_eRuntimeError, strerror(errno)); \ | |||
| @@ -147,7 +147,7 @@ static VALUE set_##x (VALUE self, VALUE x) \ | |||
| return x; \ | |||
| } \ | |||
| \ | |||
| static VALUE set_##x##2 (VALUE self, VALUE x) \ | |||
| static VALUE set_##x##2(VALUE self, VALUE x) \ | |||
| { \ | |||
| set_##x(self, x); \ | |||
| return self; \ | |||
| @@ -157,24 +157,53 @@ set_float(brightness) | |||
| set_float(gamma) | |||
| set_float(contrast) | |||
| /* | |||
| int cucul_set_dither_invert (cucul_dither_t *, int) | |||
| Invert colors of dither. | |||
| */ | |||
| #define get_set_str_from_list(x) \ | |||
| get_double_list(dither_##x) \ | |||
| static VALUE set_dither_##x(VALUE self, VALUE x) \ | |||
| { \ | |||
| if(cucul_set_dither_##x(_SELF, StringValuePtr(x))<0) \ | |||
| { \ | |||
| rb_raise(rb_eRuntimeError, strerror(errno)); \ | |||
| } \ | |||
| return x; \ | |||
| } \ | |||
| \ | |||
| static VALUE set_dither_##x##2(VALUE self, VALUE x) \ | |||
| { \ | |||
| set_dither_##x(self, x); \ | |||
| return self; \ | |||
| } | |||
| get_set_str_from_list(antialias) | |||
| get_set_str_from_list(color) | |||
| get_set_str_from_list(charset) | |||
| get_set_str_from_list(algorithm) | |||
| void Init_cucul_dither(VALUE mCucul) | |||
| { | |||
| cFont = rb_define_class_under(mCucul, "Dither", rb_cObject); | |||
| rb_define_alloc_func(cFont, dither_alloc); | |||
| rb_define_method(cFont, "initialize", dither_initialize, 8); | |||
| rb_define_method(cFont, "palette=", set_dither_palette, 1); | |||
| rb_define_method(cFont, "set_palette", set_dither_palette2, 1); | |||
| rb_define_method(cFont, "brightness=", set_brightness, 1); | |||
| rb_define_method(cFont, "set_brightness", set_brightness2, 1); | |||
| rb_define_method(cFont, "gamma=", set_gamma, 1); | |||
| rb_define_method(cFont, "set_gamma", set_gamma2, 1); | |||
| rb_define_method(cFont, "contrast=", set_contrast, 1); | |||
| rb_define_method(cFont, "set_contrast", set_contrast2, 1); | |||
| cDither = rb_define_class_under(mCucul, "Dither", rb_cObject); | |||
| rb_define_alloc_func(cDither, dither_alloc); | |||
| rb_define_method(cDither, "initialize", dither_initialize, 8); | |||
| rb_define_method(cDither, "palette=", set_dither_palette, 1); | |||
| rb_define_method(cDither, "set_palette", set_dither_palette2, 1); | |||
| rb_define_method(cDither, "brightness=", set_brightness, 1); | |||
| rb_define_method(cDither, "set_brightness", set_brightness2, 1); | |||
| rb_define_method(cDither, "gamma=", set_gamma, 1); | |||
| rb_define_method(cDither, "set_gamma", set_gamma2, 1); | |||
| rb_define_method(cDither, "contrast=", set_contrast, 1); | |||
| rb_define_method(cDither, "set_contrast", set_contrast2, 1); | |||
| rb_define_method(cDither, "antialias_list", dither_antialias_list, 0); | |||
| rb_define_method(cDither, "antialias=", set_dither_antialias, 1); | |||
| rb_define_method(cDither, "set_antialias", set_dither_antialias2, 1); | |||
| rb_define_method(cDither, "color_list", dither_color_list, 0); | |||
| rb_define_method(cDither, "color=", set_dither_color, 1); | |||
| rb_define_method(cDither, "set_color", set_dither_color2, 1); | |||
| rb_define_method(cDither, "charset_list", dither_charset_list, 0); | |||
| rb_define_method(cDither, "charset=", set_dither_charset, 1); | |||
| rb_define_method(cDither, "set_charset", set_dither_charset2, 1); | |||
| rb_define_method(cDither, "algorithm_list", dither_algorithm_list, 0); | |||
| rb_define_method(cDither, "algorithm=", set_dither_algorithm, 1); | |||
| rb_define_method(cDither, "set_algorithm", set_dither_algorithm2, 1); | |||
| } | |||