static Ret ftk_source_primary_dispatch(FtkSource* thiz) { FtkEvent event = {0}; DECL_PRIV(thiz, priv); int ret = ftk_pipe_read(priv->pipe, &event, sizeof(FtkEvent)); return_val_if_fail(ret == sizeof(FtkEvent), RET_REMOVE); switch(event.type) { case FTK_EVT_NOP: { break; } case FTK_EVT_ADD_SOURCE: { ftk_sources_manager_add(ftk_default_sources_manager(), event.u.extra); break; } case FTK_EVT_REMOVE_SOURCE: { ftk_sources_manager_remove(ftk_default_sources_manager(), event.u.extra); break; } default: { if(priv->on_event != NULL) { priv->on_event(priv->user_data, &event); } } } return RET_OK; }
FtkWndManager* ftk_wnd_manager_default_create(FtkMainLoop* main_loop) { FtkWndManager* thiz = NULL; return_val_if_fail(main_loop != NULL, NULL); if((thiz = (FtkWndManager*)FTK_ZALLOC(sizeof(FtkWndManager) + sizeof(PrivInfo))) != NULL) { DECL_PRIV(thiz, priv); priv->main_loop = main_loop; priv->long_press_timer = ftk_source_timer_create(1500, (FtkTimer)ftk_wnd_manager_default_long_press, thiz); ftk_set_primary_source(ftk_source_primary_create((FtkOnEvent)ftk_wnd_manager_default_dispatch_event, thiz)); ftk_sources_manager_add(ftk_default_sources_manager(), ftk_primary_source()); thiz->grab = ftk_wnd_manager_default_grab; thiz->ungrab = ftk_wnd_manager_default_ungrab; thiz->add = ftk_wnd_manager_default_add; thiz->remove = ftk_wnd_manager_default_remove; thiz->restack= ftk_wnd_manager_default_restack; thiz->update = ftk_wnd_manager_default_update; thiz->get_work_area = ftk_wnd_manager_default_get_work_area; thiz->queue_event = ftk_wnd_manager_default_queue_event; thiz->dispatch_event = ftk_wnd_manager_default_dispatch_event; thiz->add_global_listener = ftk_wnd_manager_default_add_global_listener; thiz->remove_global_listener = ftk_wnd_manager_default_remove_global_listener; thiz->destroy = ftk_wnd_manager_default_destroy; #ifndef FTK_SUPPORT_C99 key_tanslate_table_init(); #endif } return thiz; }
static int lua_ftk_default_sources_manager(lua_State* L) { FtkSourcesManager* retv; retv = ftk_default_sources_manager(); tolua_pushusertype(L, (FtkSourcesManager*)retv, "FtkSourcesManager"); return 1; }
static void ftk_source_touch_init(void) { FtkSource* source = NULL; source = ftk_source_touch_create(FTK_TOUCH_NAME, (FtkOnEvent)ftk_wnd_manager_queue_event_auto_rotate, ftk_default_wnd_manager()); if (source != NULL) { ftk_sources_manager_add(ftk_default_sources_manager(), source); } ftk_logd("%s: touch dev %s source=%p\n", __func__, FTK_TOUCH_NAME, source); }
static Ret ftk_init_input(void) { const char* tsdev = NULL; FtkSource* source = NULL; source = ftk_source_input_create((FtkOnEvent)ftk_wnd_manager_queue_event_auto_rotate, ftk_default_wnd_manager()); if(source != NULL) { ftk_sources_manager_add(ftk_default_sources_manager(), source); } return RET_OK; }
static Ret ftk_init_input(void) { char filename[260] = {0}; const char* tsdev = NULL; FtkSource* source = NULL; struct dirent* iter = NULL; const char* extra_input = NULL; struct stat buf; DIR* dir = opendir("/dev/input"); return_val_if_fail(dir != NULL, RET_FAIL); tsdev = getenv("FTK_TSLIB_FILE") ? getenv("FTK_TSLIB_FILE") : FTK_TSLIB_FILE; while((iter = readdir(dir)) != NULL) { if(iter->d_name[0] == '.') continue; ftk_snprintf(filename, sizeof(filename), "/dev/input/%s", iter->d_name); if (stat(filename, &buf) == -1) { perror("stat"); continue; } //if(!(iter->d_type & DT_CHR)) continue; if(!(buf.st_mode & S_IFCHR)) continue; #ifdef USE_TSLIB if(strcmp(filename, tsdev) == 0) { /*skip tsdev now, open it later.*/ continue; } else #endif if(strcmp(filename, "/dev/input/mice") == 0) { int max_x = ftk_display_width(ftk_default_display()); int max_y = ftk_display_height(ftk_default_display()); source = ftk_source_ps2mouse_create(filename, (FtkOnEvent)ftk_wnd_manager_queue_event_auto_rotate, ftk_default_wnd_manager(), max_x, max_y); } else { source = ftk_source_input_create(filename, (FtkOnEvent)ftk_wnd_manager_queue_event_auto_rotate, ftk_default_wnd_manager()); } if(source != NULL) { ftk_sources_manager_add(ftk_default_sources_manager(), source); } } closedir(dir); #ifdef USE_TSLIB source = ftk_source_tslib_create(tsdev, (FtkOnEvent)ftk_wnd_manager_queue_event_auto_rotate, ftk_default_wnd_manager()); if(source != NULL) { ftk_sources_manager_add(ftk_default_sources_manager(), source); } ftk_logd("%s: tsdev %s source=%p\n", __func__, tsdev, source); #endif extra_input = getenv("FTK_EXTRA_INPUT"); if(extra_input != NULL) { source = ftk_source_input_create(filename, (FtkOnEvent)ftk_wnd_manager_queue_event_auto_rotate, ftk_default_wnd_manager()); if(source != NULL) { ftk_sources_manager_add(ftk_default_sources_manager(), source); ftk_logd("add %s input device\n", extra_input); } } return RET_OK; }
void ftk_deinit(void) { if(ftk_default_input_method_preeditor() != NULL) { ftk_input_method_preeditor_destroy(ftk_default_input_method_preeditor()); } if(ftk_default_wnd_manager() != NULL) { ftk_wnd_manager_destroy(ftk_default_wnd_manager()); } if(ftk_default_main_loop() != NULL) { ftk_main_loop_destroy(ftk_default_main_loop()); } if(ftk_default_sources_manager() != NULL) { ftk_sources_manager_destroy(ftk_default_sources_manager()); } if(ftk_default_bitmap_factory() != NULL) { ftk_bitmap_factory_destroy(ftk_default_bitmap_factory()); } if(ftk_default_text_layout() != NULL) { ftk_text_layout_destroy(ftk_default_text_layout()); } if(ftk_default_display() != NULL) { ftk_display_destroy(ftk_default_display()); } if(ftk_default_theme() != NULL) { ftk_theme_destroy(ftk_default_theme()); } if(ftk_shared_canvas() != NULL) { ftk_canvas_destroy(ftk_shared_canvas()); } if(ftk_default_input_method_manager() != NULL) { ftk_input_method_manager_destroy(ftk_default_input_method_manager()); } if(ftk_default_config() != NULL) { ftk_config_destroy(ftk_default_config()); } ftk_platform_deinit(); #ifndef USE_STD_MALLOC if(ftk_default_allocator() != NULL) { ftk_allocator_destroy(ftk_default_allocator()); } #endif ftk_logd("%s: ftk exit.\n", __func__); ftk_clear_globals(); return; }
Ret ftk_init(int argc, char* argv[]) { FtkColor bg = {0}; FtkConfig* config = NULL; FtkDisplay* display = NULL; static int ftk_inited = 0; if(ftk_inited) { return RET_OK; } else { ftk_inited = 1; } ftk_clear_globals(); PROFILE_START(); #ifndef USE_STD_MALLOC ftk_set_allocator(FTK_ALLOC_PROFILE(ftk_allocator_default_create())); quit_if_fail(ftk_default_allocator(), "Init allocator failed.\n"); #endif ftk_platform_init(argc, argv); config = ftk_config_create(); ftk_set_config(config); ftk_config_init(config, argc, argv); quit_if_fail(ftk_default_config(), "Init config failed.\n"); PROFILE_END("config init"); ftk_set_text_layout(ftk_text_layout_create()); PROFILE_START(); ftk_set_sources_manager(ftk_sources_manager_create(64)); ftk_set_main_loop(ftk_main_loop_create(ftk_default_sources_manager())); ftk_set_wnd_manager(ftk_wnd_manager_default_create(ftk_default_main_loop())); quit_if_fail(ftk_default_wnd_manager(), "Init windows manager failed.\n"); PROFILE_END("source main loop wnd manager init"); ftk_init_bitmap_factory(); PROFILE_START(); ftk_init_theme(ftk_config_get_theme(config)); ftk_backend_init(argc, argv); PROFILE_END("theme and backend init"); display = ftk_display_rotate_create(ftk_default_display(), ftk_config_get_rotate(ftk_default_config())); ftk_set_display(display); quit_if_fail(ftk_default_display(), "Init display failed.\n"); PROFILE_START(); bg.a = 0xff; ftk_set_shared_canvas(ftk_canvas_create(ftk_display_width(display), ftk_display_height(display), &bg)); ftk_logd("canvas init: %d %d\n", ftk_display_width(display), ftk_display_height(display)); PROFILE_END("canvas init"); PROFILE_START(); ftk_set_input_method_manager(ftk_input_method_manager_create()); ftk_set_input_method_preeditor(ftk_input_method_preeditor_default_create()); quit_if_fail(ftk_default_input_method_manager(), "Init input method failed.\n"); PROFILE_END("input method init"); PROFILE_START(); if(ftk_config_get_enable_status_bar(config)) { ftk_init_panel(); } PROFILE_END("panel init"); if(ftk_config_get_enable_cursor(config)) { #ifndef USE_LINUX_DFB ftk_enable_curosr(); #endif } return RET_OK; }