- Timestamp:
- Apr 19, 2008, 1:31:39 PM (15 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
libcaca/trunk/ruby/caca-display.c
r2093 r2296 34 34 { 35 35 caca_display_t *display; 36 cucul_canvas_t *canvas; 37 VALUE cv; 38 39 rb_scan_args(argc, argv, "01", &cv); 40 41 if(NIL_P(cv)) 42 { 43 display = caca_create_display(NULL); 44 canvas = caca_get_canvas(display); 45 cv = canvas_create(canvas); 36 cucul_canvas_t *canvas = NULL; 37 const char *driver = NULL; 38 VALUE cv = Qnil; 39 VALUE arg1, arg2; 40 41 rb_scan_args(argc, argv, "02", &arg1, &arg2); 42 43 if(CLASS_OF(arg1) == cCanvas) 44 { 45 cv = arg1; 46 if(CLASS_OF(arg2) == cCanvas) 47 { 48 rb_raise(rb_eArgError, "Only one argument can be a Cucul::Canvas"); 49 } 50 } 51 else if(CLASS_OF(arg2) == cCanvas) 52 { 53 cv = arg2; 54 } 55 56 if(CLASS_OF(arg1) == T_STRING) 57 { 58 driver = StringValuePtr(arg1); 59 if(CLASS_OF(arg2) == T_STRING) 60 { 61 rb_raise(rb_eArgError, "Only one argument can be a string"); 62 } 63 } 64 else if(CLASS_OF(arg2) == T_STRING) 65 { 66 driver = StringValuePtr(arg2); 67 } 68 69 if(cv != Qnil) 70 canvas = DATA_PTR(cv); 71 72 if(driver == NULL) 73 { 74 display = caca_create_display(canvas); 75 if(display && NIL_P(cv)) 76 { 77 cv = canvas_create(caca_get_canvas(display)); 78 } 46 79 } 47 80 else 48 81 { 49 if(CLASS_OF(cv) != cCanvas) 50 { 51 rb_raise(rb_eArgError, "Argument is not a Cucul::Canvas"); 52 } 53 54 display = caca_create_display(DATA_PTR(cv)); 82 display = caca_create_display_with_driver(canvas, driver); 55 83 } 56 84 … … 199 227 } 200 228 229 static VALUE driver_list(void) 230 { 231 VALUE ary; 232 char const* const* list; 233 234 list = caca_get_display_driver_list(); 235 236 ary = rb_ary_new(); 237 while (*list != NULL) 238 { 239 rb_ary_push(ary, rb_str_new2(*list)); 240 list++; 241 } 242 243 return ary; 244 } 245 246 static VALUE get_driver(VALUE self) 247 { 248 return rb_str_new2(caca_get_display_driver(_SELF)); 249 } 250 251 static VALUE set_driver(VALUE self, VALUE driver) 252 { 253 if(caca_set_display_driver(_SELF, StringValuePtr(driver))<0) 254 { 255 rb_raise(rb_eRuntimeError, strerror(errno)); 256 } 257 return driver; 258 } 259 260 static VALUE set_driver2(VALUE self, VALUE driver) 261 { 262 set_driver(self, driver); 263 return self; 264 } 265 201 266 void Init_caca_display(VALUE mCaca) 202 267 { 203 268 cDisplay = rb_define_class_under(mCaca, "Display", rb_cObject); 204 269 rb_define_alloc_func(cDisplay, display_alloc); 270 271 rb_define_singleton_method(cDisplay, "driver_list", driver_list, 0); 205 272 206 273 rb_define_method(cDisplay, "initialize", display_initialize, -1); … … 216 283 rb_define_method(cDisplay, "mouse_y", get_mouse_y, 0); 217 284 rb_define_method(cDisplay, "mouse=", set_mouse, 1); 285 rb_define_method(cDisplay, "driver", get_driver, 0); 286 rb_define_method(cDisplay, "set_driver", set_driver2, 1); 287 rb_define_method(cDisplay, "driver=", set_driver, 1); 218 288 rb_define_method(cDisplay, "set_mouse", set_mouse2, 1); 219 289 rb_define_method(cDisplay, "get_event", get_event, 2);
Note: See TracChangeset
for help on using the changeset viewer.