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