예제 #1
0
파일: canvas.c 프로젝트: AnthonBerg/shoes
void
shoes_canvas_paint(VALUE self)
{
  rb_rescue2(CASTHOOK(shoes_canvas_paint_call), self, 
    CASTHOOK(shoes_canvas_error), self, rb_cObject, 0);
  return;
}
예제 #2
0
파일: ruby.c 프로젝트: Shoes3/shoes3
VALUE shoes_safe_block(VALUE self, VALUE block, VALUE args) {
    safe_block sb;
    VALUE v;

    sb.canvas = shoes_find_canvas(self);
    sb.block = block;
    sb.args = args;
    rb_gc_register_address(&args);

    v = rb_rescue2(CASTHOOK(shoes_safe_block_call), (VALUE)&sb,
                   CASTHOOK(shoes_safe_block_exception), (VALUE)&sb, rb_cObject, 0);
    rb_gc_unregister_address(&args);
    return v;
}
예제 #3
0
파일: world.c 프로젝트: danorine/shoes
shoes_code
shoes_start(char *path, char *uri)
{
  shoes_code code = SHOES_OK;
  char bootup[SHOES_BUFSIZE];
  int len = shoes_snprintf(bootup,
    SHOES_BUFSIZE,
    "begin;"
      "DIR = File.expand_path(File.dirname(%%q<%s>));"
      "$:.replace([DIR+'/ruby/lib/'+PLATFORM, DIR+'/ruby/lib', DIR+'/lib']);"
      "require 'shoes';"
      "DIR;"
    "rescue Object => e;"
      "puts(e.message);"
    "end",
    path);

  if (len < 0 || len >= SHOES_BUFSIZE)
  {
    QUIT("Path to script is too long.");
  }

  VALUE str = rb_eval_string(bootup);
  if (NIL_P(str))
    return SHOES_QUIT;

  StringValue(str);
  strcpy(shoes_world->path, RSTRING(str)->ptr);

  char *load_uri_str = NULL;
  VALUE load_uri = rb_rescue2(CASTHOOK(shoes_start_begin), Qnil, CASTHOOK(shoes_start_exception), Qnil, rb_cObject, 0);
  if (!RTEST(load_uri))
    return SHOES_QUIT;
  if (rb_obj_is_kind_of(load_uri, rb_eException))
  {
    QUIT_ALERT(load_uri);
  }

  if (rb_obj_is_kind_of(load_uri, rb_cString))
    load_uri_str = RSTRING_PTR(load_uri);

  code = shoes_load(load_uri_str);
  if (code != SHOES_OK)
    goto quit;

  code = shoes_app_start(shoes_world->apps, uri);
quit:
  return code;
}
예제 #4
0
파일: world.c 프로젝트: Klokka/Lumi
lumi_code
lumi_start(char *path, char *uri)
{
  lumi_code code = LUMI_OK;
  char bootup[LUMI_BUFSIZE];
  int len = lumi_snprintf(bootup,
    LUMI_BUFSIZE,
    "begin;"
      "DIR = File.expand_path(File.dirname(%%q<%s>));"
      "$:.replace([DIR+'/ruby/lib/'+(ENV['LUMI_RUBY_ARCH'] || RUBY_PLATFORM), DIR+'/ruby/lib', DIR+'/lib', '.']);"
      "require 'lumi';"
      "DIR;"
    "rescue Object => e;"
      "puts(e.message);"
    "end",
    path);

  if (len < 0 || len >= LUMI_BUFSIZE)
  {
    QUIT("Path to script is too long.");
  }

  VALUE str = rb_eval_string(bootup);
  if (NIL_P(str))
    return LUMI_QUIT;

  StringValue(str);
  strcpy(lumi_world->path, RSTRING_PTR(str));

  char *load_uri_str = NULL;
  VALUE load_uri = rb_rescue2(CASTHOOK(lumi_start_begin), Qnil, CASTHOOK(lumi_start_exception), Qnil, rb_cObject, 0);
  if (!RTEST(load_uri))
    return LUMI_QUIT;
  if (rb_obj_is_kind_of(load_uri, rb_eException))
  {
    QUIT_ALERT(load_uri);
  }

  if (rb_obj_is_kind_of(load_uri, rb_cString))
    load_uri_str = RSTRING_PTR(load_uri);

  code = lumi_load(load_uri_str);
  if (code != LUMI_OK)
    goto quit;

  code = lumi_app_start(lumi_world->apps, uri);
quit:
  return code;
}
예제 #5
0
파일: world.c 프로젝트: danorine/shoes
shoes_code
shoes_load(char *path)
{
  shoes_code code = SHOES_QUIT;
  char bootup[SHOES_BUFSIZE];

  if (path)
  {
    sprintf(bootup, "Shoes.load(%%q<%s>);", path);

    VALUE v = rb_rescue2(CASTHOOK(shoes_load_begin), (VALUE)bootup, CASTHOOK(shoes_load_exception), Qnil, rb_cObject, 0);
    if (rb_obj_is_kind_of(v, rb_eException))
    {
      QUIT_ALERT(v);
    }
  }

  return SHOES_OK;
}
예제 #6
0
파일: world.c 프로젝트: Klokka/Lumi
lumi_code
lumi_load(char *path)
{
  char bootup[LUMI_BUFSIZE];

  if (path)
  {
    sprintf(bootup, "Lumi.visit(%%q<%s>);", path);

    VALUE v = rb_rescue2(CASTHOOK(lumi_load_begin), (VALUE)bootup, CASTHOOK(lumi_load_exception), Qnil, rb_cObject, 0);
    if (rb_obj_is_kind_of(v, rb_eException))
    {
      lumi_canvas_error(Qnil, v);
      rb_eval_string("Lumi.show_log");
    }
  }

  return LUMI_OK;
}
예제 #7
0
파일: menu.c 프로젝트: Shoes3/shoes3
void shoes_menu_init() {
    cShoesMenu  = rb_define_class_under(cTypes, "Menu", cNative);
    rb_define_method(cShoesMenu, "items", CASTHOOK(shoes_menu_list), 0);
    rb_define_method(cShoesMenu, "[]", CASTHOOK(shoes_menu_at), 1);
    rb_define_method(cShoesMenu, "title", CASTHOOK(shoes_menu_title), 0);
    rb_define_method(cShoesMenu, "<<", CASTHOOK(shoes_menu_append), 1);
    rb_define_method(cShoesMenu, "append", CASTHOOK(shoes_menu_append), 1);
    rb_define_method(cShoesMenu, "insert", CASTHOOK(shoes_menu_insert), 2);
    rb_define_method(cShoesMenu, "index", CASTHOOK(shoes_menu_index), 1);
    rb_define_method(cShoesMenu, "remove", CASTHOOK(shoes_menu_remove), 1);
    RUBY_M("+menu", menu, -1);
}
예제 #8
0
파일: ruby.c 프로젝트: Shoes3/shoes3
VALUE ts_funcall2(VALUE obj, ID meth, int argc, VALUE *argv) {
    VALUE tmp[4];
    if (!rb_block_given_p())
        return rb_funcall2(obj, meth, argc, argv);
    tmp[0] = obj;
    tmp[1] = (VALUE)meth;
    tmp[2] = (VALUE)argc;
    tmp[3] = (VALUE)argv;
    return rb_iterate((VALUE(*)(VALUE))ts_each, (VALUE)tmp, CASTHOOK(rb_yield), 0);
}
예제 #9
0
파일: app.c 프로젝트: gensym/shoes
shoes_code
shoes_app_visit(shoes_app *app, char *path)
{
  shoes_exec exec;
  shoes_canvas *canvas;
  VALUE meth;
  Data_Get_Struct(app->canvas, shoes_canvas, canvas);

  canvas->slot->scrolly = 0;
  shoes_native_slot_clear(canvas);
  shoes_app_clear(app);
  shoes_app_reset_styles(app);
  meth = rb_funcall(cShoes, s_run, 1, app->location = rb_str_new2(path));

  VALUE app_block = rb_iv_get(app->self, "@main_app");
  if (!NIL_P(app_block))
    rb_ary_store(meth, 0, app_block);

  exec.app = app;
  exec.block = rb_ary_entry(meth, 0);
  exec.args = rb_ary_entry(meth, 1);
  if (rb_obj_is_kind_of(exec.block, rb_cUnboundMethod)) {
    VALUE klass = rb_unbound_get_class(exec.block);
    exec.canvas = app->nestslot = shoes_slot_new(klass, ssNestSlot, app->canvas);
    exec.block = rb_funcall(exec.block, s_bind, 1, exec.canvas);
    exec.ieval = 0;
    rb_ary_push(canvas->contents, exec.canvas);
  } else {
    exec.canvas = app->nestslot = app->canvas;
    exec.ieval = 1;
  }

  rb_rescue2(CASTHOOK(shoes_app_run), (VALUE)&exec, CASTHOOK(shoes_app_exception), (VALUE)&exec, rb_cObject, 0);

  rb_ary_clear(exec.app->nesting);
  return SHOES_OK;
}
예제 #10
0
파일: event.c 프로젝트: Shoes3/shoes3
void shoes_shoesevent_init() {
    cShoesEvent = rb_define_class_under(cTypes, "ShoesEvent", cNative); 
    rb_define_alloc_func(cShoesEvent, shoes_event_alloc);
    rb_define_method(cShoesEvent, "type", CASTHOOK(shoes_event_type), 0);
    rb_define_method(cShoesEvent, "object", CASTHOOK(shoes_event_object), 0);
    rb_define_method(cShoesEvent, "accept", CASTHOOK(shoes_event_get_accept),0);
    rb_define_method(cShoesEvent, "accept=", CASTHOOK(shoes_event_set_accept),1);
    rb_define_method(cShoesEvent, "button", CASTHOOK(shoes_event_button), 0);
    rb_define_method(cShoesEvent, "x", CASTHOOK(shoes_event_x), 0);
    rb_define_method(cShoesEvent, "y", CASTHOOK(shoes_event_y), 0);
    rb_define_method(cShoesEvent, "width", CASTHOOK(shoes_event_width), 0);
    rb_define_method(cShoesEvent, "height", CASTHOOK(shoes_event_height), 0);
    rb_define_method(cShoesEvent, "key", CASTHOOK(shoes_event_key), 0);
    rb_define_method(cShoesEvent, "key=", CASTHOOK(shoes_event_set_key), 1);
    rb_define_method(cShoesEvent, "modifiers", CASTHOOK(shoes_event_modifiers), 0);
    RUBY_M("+shoesevent", shoesevent, -1);
}
예제 #11
0
파일: ruby.c 프로젝트: Shoes3/shoes3
VALUE shoes_exit_setup(VALUE self) {
    rb_define_method(rb_mKernel, "quit", CASTHOOK(shoes_app_quit), 0);
    rb_define_method(rb_mKernel, "exit", CASTHOOK(shoes_app_quit), 0);
    return Qtrue;
}
예제 #12
0
파일: ruby.c 프로젝트: Shoes3/shoes3
//
// Everything exposed to Ruby is exposed here.
//
void shoes_ruby_init() {
    progname = rb_str_new2("(eval)");
    rb_define_variable("$0", &progname);
    rb_define_variable("$PROGRAM_NAME", &progname);

    instance_eval_proc = rb_eval_string("lambda{|o,b| o.instance_eval(&b)}");
    rb_gc_register_address(&instance_eval_proc);
    ssNestSlot = rb_eval_string("{:height => 1.0}");
    rb_gc_register_address(&ssNestSlot);

    s_aref = rb_intern("[]=");
    s_perc = rb_intern("%");
    s_mult = rb_intern("*");
    SYMBOL_DEFS(SYMBOL_INTERN);

    symAltQuest = ID2SYM(rb_intern("alt_?"));
    symAltSlash = ID2SYM(rb_intern("alt_/"));
    symAltEqual = ID2SYM(rb_intern("alt_="));
    symAltDot = ID2SYM(rb_intern("alt_."));
    symAltSemiColon = ID2SYM(rb_intern("alt_;"));

    //
    // I want all elements to be addressed Shoes::Name, but also available in
    // a separate mixin (cTypes), for inclusion in every Shoes.app block.
    //
    cTypes = rb_define_module("Shoes");
    rb_mod_remove_const(rb_cObject, rb_str_new2("Shoes"));

    cShoesWindow = rb_define_class_under(cTypes, "Window", rb_cObject);
    cMouse = rb_define_class_under(cTypes, "Mouse", rb_cObject);

    cCanvas = rb_define_class_under(cTypes, "Canvas", rb_cObject);
    rb_define_alloc_func(cCanvas, shoes_canvas_alloc);
    rb_define_method(cCanvas, "top", CASTHOOK(shoes_canvas_get_top), 0);
    rb_define_method(cCanvas, "left", CASTHOOK(shoes_canvas_get_left), 0);
    rb_define_method(cCanvas, "width", CASTHOOK(shoes_canvas_get_width), 0);
    rb_define_method(cCanvas, "height", CASTHOOK(shoes_canvas_get_height), 0);
    rb_define_method(cCanvas, "scroll_height", CASTHOOK(shoes_canvas_get_scroll_height), 0);
    rb_define_method(cCanvas, "scroll_max", CASTHOOK(shoes_canvas_get_scroll_max), 0);
    rb_define_method(cCanvas, "scroll_top", CASTHOOK(shoes_canvas_get_scroll_top), 0);
    rb_define_method(cCanvas, "scroll_top=", CASTHOOK(shoes_canvas_set_scroll_top), 1);
    rb_define_method(cCanvas, "displace", CASTHOOK(shoes_canvas_displace), 2);
    rb_define_method(cCanvas, "move", CASTHOOK(shoes_canvas_move), 2);
    rb_define_method(cCanvas, "style", CASTHOOK(shoes_canvas_style), -1);
    rb_define_method(cCanvas, "parent", CASTHOOK(shoes_canvas_get_parent), 0);
    rb_define_method(cCanvas, "contents", CASTHOOK(shoes_canvas_contents), 0);
    rb_define_method(cCanvas, "children", CASTHOOK(shoes_canvas_children), 0);
    rb_define_method(cCanvas, "draw", CASTHOOK(shoes_canvas_draw), 2);
    rb_define_method(cCanvas, "hide", CASTHOOK(shoes_canvas_hide), 0);
    rb_define_method(cCanvas, "show", CASTHOOK(shoes_canvas_show), 0);
    rb_define_method(cCanvas, "toggle", CASTHOOK(shoes_canvas_toggle), 0);
    rb_define_method(cCanvas, "remove", CASTHOOK(shoes_canvas_remove), 0);
    rb_define_method(cCanvas, "refresh_slot", CASTHOOK(shoes_canvas_refresh_slot), 0);
    rb_define_method(cCanvas, "refresh", CASTHOOK(shoes_canvas_refresh_slot), 0);
    rb_define_method(cCanvas, "cursor", CASTHOOK(shoes_canvas_get_cursor), 0);
    rb_define_method(cCanvas, "cursor=", CASTHOOK(shoes_canvas_set_cursor), 1);

    cShoes = rb_define_class("Shoes", cCanvas);
    rb_include_module(cShoes, cTypes);
    rb_const_set(cShoes, rb_intern("Types"), cTypes);

    shoes_version_init();

    // other Shoes:: constants
    rb_const_set(cTypes, rb_intern("RAD2PI"), rb_float_new(SHOES_RAD2PI));
    rb_const_set(cTypes, rb_intern("TWO_PI"), rb_float_new(SHOES_PIM2));
    rb_const_set(cTypes, rb_intern("HALF_PI"), rb_float_new(SHOES_HALFPI));
    rb_const_set(cTypes, rb_intern("PI"), rb_float_new(SHOES_PI));

    cApp = rb_define_class_under(cTypes, "App", rb_cObject);
    rb_define_alloc_func(cApp, shoes_app_alloc);
    rb_define_method(cApp, "fullscreen", CASTHOOK(shoes_app_get_fullscreen), 0);
    rb_define_method(cApp, "fullscreen=", CASTHOOK(shoes_app_set_fullscreen), 1);
    rb_define_method(cApp, "name", CASTHOOK(shoes_app_get_title), 0);
    rb_define_method(cApp, "name=", CASTHOOK(shoes_app_set_title), 1);
    rb_define_method(cApp, "location", CASTHOOK(shoes_app_location), 0);
    rb_define_method(cApp, "started?", CASTHOOK(shoes_app_is_started), 0);
    rb_define_method(cApp, "left", CASTHOOK(shoes_app_get_window_x_position), 0);
    rb_define_method(cApp, "top", CASTHOOK(shoes_app_get_window_y_position), 0);
    rb_define_method(cApp, "move", CASTHOOK(shoes_app_set_window_position), 2);
    rb_define_method(cApp, "width", CASTHOOK(shoes_app_get_width), 0);
    rb_define_method(cApp, "height", CASTHOOK(shoes_app_get_height), 0);
    rb_define_method(cApp, "resize", CASTHOOK(shoes_app_resize_window), 2);
    rb_define_method(cApp, "resizable", CASTHOOK(shoes_app_get_resizable), 0);
    rb_define_method(cApp, "resizable=", CASTHOOK(shoes_app_set_resizable), 1);
    rb_define_method(cApp, "slot", CASTHOOK(shoes_app_slot), 0);
    rb_define_method(cApp, "set_window_icon_path", CASTHOOK(shoes_app_set_icon), 1); // New in 3.2.19
    rb_define_method(cApp, "set_window_title", CASTHOOK(shoes_app_set_wtitle), 1); // New in 3.2.19
    rb_define_method(cApp, "opacity", CASTHOOK(shoes_app_get_opacity), 0);
    rb_define_method(cApp, "opacity=", CASTHOOK(shoes_app_set_opacity), 1);
    rb_define_method(cApp, "decorated", CASTHOOK(shoes_app_get_decoration), 0);
    rb_define_method(cApp, "decorated=", CASTHOOK(shoes_app_set_decoration), 1);
    rb_define_alias(cApp, "decorated?", "decorated");
    rb_define_method(cApp, "cache", CASTHOOK(shoes_app_get_cache), 0);
    rb_define_method(cApp, "cache=", CASTHOOK(shoes_app_set_cache), 1);
    rb_define_method(cApp, "cache_clear", CASTHOOK(shoes_app_clear_cache), 1);
    rb_define_method(cApp, "event=", CASTHOOK(shoes_app_set_event_handler), 1);
    rb_define_method(cApp, "replay_event", CASTHOOK(shoes_app_replay_event), 1);
    rb_define_method(cApp, "monitor", CASTHOOK(shoes_app_monitor_get), 0);
    rb_define_method(cApp, "monitor=", CASTHOOK(shoes_app_monitor_set), 1);
    rb_define_method(cApp, "id", CASTHOOK(shoes_app_id), 0);
    
    /* Settings holds global values, not per app values. Part of shoes_world_t */
    cSettings  = rb_define_class_under(cTypes, "Settings", rb_cObject);
    rb_define_alloc_func(cSettings, shoes_settings_alloc);
    rb_define_method(cSettings, "dbus", CASTHOOK(shoes_settings_dbus),0);
    rb_define_method(cSettings, "app_name", CASTHOOK(shoes_settings_app_name),0);
    rb_define_method(cSettings, "app_name=", CASTHOOK(shoes_settings_set_app_name),1);
    rb_define_method(cSettings, "icon_path", CASTHOOK(shoes_settings_app_icon),0);
    rb_define_method(cSettings, "icon_path=", CASTHOOK(shoes_settings_set_app_icon),1);
    rb_define_method(cSettings, "theme", CASTHOOK(shoes_settings_get_theme),0);
    rb_define_method(cSettings, "theme=", CASTHOOK(shoes_settings_set_theme),1);
    rb_define_method(cSettings, "mdi", CASTHOOK(shoes_settings_mdi),0);
    rb_define_method(cSettings, "use_menus", CASTHOOK(shoes_settings_menu),0);
    rb_define_method(cSettings, "rdomain", CASTHOOK(shoes_settings_rdomain),0);
    rb_define_method(cSettings, "rdomain=", CASTHOOK(shoes_settings_set_rdomain),1);
    rb_define_method(cSettings, "monitor_count", CASTHOOK(shoes_settings_monitor_count),0);
    rb_define_method(cSettings, "monitor_geometry", CASTHOOK(shoes_settings_monitor_geometry),1);
    rb_define_method(cSettings, "monitor_default", CASTHOOK(shoes_settings_monitor_default), 0);
    rb_define_method(cSettings, "extra1", CASTHOOK(shoes_setting_extra1), 0);
    rb_define_method(cSettings, "extra2", CASTHOOK(shoes_setting_extra2), 0);
    rb_define_method(cSettings, "wintmo", CASTHOOK(shoes_setting_get_wintmo), 0);
    rb_define_method(cSettings, "wintmo=", CASTHOOK(shoes_setting_set_wintmo), 1);
    rb_define_method(cSettings, "display_backend", CASTHOOK(shoes_setting_display_backend), 0);

    cDialog = rb_define_class_under(cTypes, "Dialog", cApp);

    eInvMode = rb_define_class_under(cTypes, "InvalidModeError", rb_eStandardError);
    eNotImpl = rb_define_class_under(cTypes, "NotImplementedError", rb_eStandardError);
    eImageError = rb_define_class_under(cTypes, "ImageError", rb_eStandardError);
    C(HEX_SOURCE, "/^(?:0x|#)?([0-9A-F]{2})([0-9A-F]{2})([0-9A-F]{2})$/i");
    C(HEX3_SOURCE, "/^(?:0x|#)?([0-9A-F])([0-9A-F])([0-9A-F])$/i");
    C(RGB_SOURCE, "/^rgb\\((\\d+), *(\\d+), *(\\d+)\\)$/i");
    C(RGBA_SOURCE, "/^rgb\\((\\d+), *(\\d+), *(\\d+), *(\\d+)\\)$/i");
    C(GRAY_SOURCE, "/^gray\\((\\d+)\\)$/i");
    C(GRAYA_SOURCE, "/^gray\\((\\d+), *(\\d+)\\)$/i");
    C(LF, "/\\r?\\n/");
    rb_eval_string(
        "def Shoes.escape(string);"
        "string.gsub(/&/n, '&amp;').gsub(/\\\"/n, '&quot;').gsub(/>/n, '&gt;').gsub(/</n, '&lt;');"
        "end"
    );

    rb_define_singleton_method(cShoes, "APPS", CASTHOOK(shoes_apps_get), 0);
    rb_define_singleton_method(cShoes, "app", CASTHOOK(shoes_app_main), -1);
    rb_define_singleton_method(cShoes, "p", CASTHOOK(shoes_p), 1);
    rb_define_singleton_method(cShoes, "log", CASTHOOK(shoes_log), 0);
    rb_define_singleton_method(cShoes, "show_console", CASTHOOK(shoes_app_console), 0); // New in 3.2.23
    rb_define_singleton_method(cShoes, "terminal", CASTHOOK(shoes_app_terminal), -1); // New in 3.3.2 replaces console
    rb_define_singleton_method(cShoes, "quit", CASTHOOK(shoes_app_quit), 0); // Shoes 3.3.2
    rb_define_singleton_method(cShoes, "settings", CASTHOOK(shoes_app_settings), 0); // Shoes 3.3.7 
    //rb_define_singleton_method(cShoes, "exit", CASTHOOK(shoes_app_quit), 0);

    //
    // Canvas methods
    // See ruby.h for the complete list of Canvas method signatures.
    // Macros are used to build App redirection methods, which should be
    // speedier than method_missing.
    //

    CANVAS_DEFS(RUBY_M);

    //
    // Shoes Kernel methods
    //
    //rb_define_method(rb_mKernel, "quit", CASTHOOK(shoes_app_quit), 0);
    //rb_define_method(rb_mKernel, "exit", CASTHOOK(shoes_app_quit), 0);
    rb_define_method(rb_mKernel, "secret_exit_hook", CASTHOOK(shoes_exit_setup),0); //unused?

    rb_define_method(rb_mKernel, "debug", CASTHOOK(shoes_canvas_debug), 1);
    rb_define_method(rb_mKernel, "info", CASTHOOK(shoes_canvas_info), 1);
    rb_define_method(rb_mKernel, "warn", CASTHOOK(shoes_canvas_warn), 1);
    rb_define_method(rb_mKernel, "error", CASTHOOK(shoes_canvas_error), 1);

    cFlow       = rb_define_class_under(cTypes, "Flow", cShoes);
    cStack      = rb_define_class_under(cTypes, "Stack", cShoes);
    cMask       = rb_define_class_under(cTypes, "Mask", cShoes);
    cWidget     = rb_define_class_under(cTypes, "Widget", cShoes);

    rb_define_method(cApp, "method_missing", CASTHOOK(shoes_app_method_missing), -1);

    rb_define_method(rb_mKernel, "alert", CASTHOOK(shoes_dialog_alert), -1);
    rb_define_method(rb_mKernel, "ask", CASTHOOK(shoes_dialog_ask), -1);
    rb_define_method(rb_mKernel, "confirm", CASTHOOK(shoes_dialog_confirm), -1);
    rb_define_method(rb_mKernel, "ask_color", CASTHOOK(shoes_dialog_color), 1);
    rb_define_method(rb_mKernel, "ask_open_file", CASTHOOK(shoes_dialog_open), -1);
    rb_define_method(rb_mKernel, "ask_save_file", CASTHOOK(shoes_dialog_save), -1);
    rb_define_method(rb_mKernel, "ask_open_folder", CASTHOOK(shoes_dialog_open_folder), -1);
    rb_define_method(rb_mKernel, "ask_save_folder", CASTHOOK(shoes_dialog_save_folder), -1);
    rb_define_method(rb_mKernel, "font", CASTHOOK(shoes_font), 1);
    
    SHOES_TYPES_INIT;
}