Beispiel #1
0
static int lua_ftk_set_shared_canvas(lua_State* L)
{
	tolua_Error err = {0};
	FtkCanvas* canvas;
	int param_ok = tolua_isusertype(L, 1, "FtkCanvas", 0, &err);

	return_val_if_fail(param_ok, 0);

	canvas = tolua_tousertype(L, 1, 0);
	ftk_set_shared_canvas(canvas);

	return 1;
}
Beispiel #2
0
void ftk_deinit(void)
{
	if(ftk_default_input_method_preeditor() != NULL)
	{
		ftk_input_method_preeditor_destroy(ftk_default_input_method_preeditor());
		ftk_set_input_method_preeditor(NULL);
	}

	if(ftk_default_wnd_manager() != NULL)
	{
		ftk_wnd_manager_destroy(ftk_default_wnd_manager());
		ftk_set_wnd_manager(NULL);
	}
	
	if(ftk_default_main_loop() != NULL)
	{
		ftk_main_loop_destroy(ftk_default_main_loop());
		ftk_set_main_loop(NULL);
	}

	if(ftk_default_sources_manager() != NULL)
	{
		ftk_sources_manager_destroy(ftk_default_sources_manager());
		ftk_set_sources_manager(NULL);
	}

	if(ftk_default_bitmap_factory() != NULL)
	{
		ftk_bitmap_factory_destroy(ftk_default_bitmap_factory());
		ftk_set_bitmap_factory(NULL);
	}

	if(ftk_default_text_layout() != NULL)
	{
		ftk_text_layout_destroy(ftk_default_text_layout());
		ftk_set_text_layout(NULL);
	}

	if(ftk_default_font() != NULL)
	{
		ftk_font_destroy(ftk_default_font());
		ftk_set_font(NULL);
	}

	if(ftk_default_display() != NULL)
	{
		ftk_display_destroy(ftk_default_display());
		ftk_set_display(NULL);
	}

	if(ftk_default_theme() != NULL)
	{
		ftk_theme_destroy(ftk_default_theme());
		ftk_set_theme(NULL);
	}

	if(ftk_shared_canvas() != NULL)
	{
		ftk_canvas_destroy(ftk_shared_canvas());
		ftk_set_shared_canvas(NULL);
	}

	if(ftk_default_input_method_manager() != NULL)
	{
		ftk_input_method_manager_destroy(ftk_default_input_method_manager());
		ftk_set_input_method_manager(NULL);
	}

	if(ftk_default_config() != NULL)
	{
		ftk_config_destroy(ftk_default_config());
		ftk_set_config(NULL);
	}
	
	ftk_platform_deinit();

#ifndef USE_STD_MALLOC
	if(ftk_default_allocator() != NULL)
	{
		ftk_allocator_destroy(ftk_default_allocator());
		ftk_set_allocator(NULL);
	}
#endif

	ftk_logd("%s: ftk exit.\n", __func__);

	return;
}
Beispiel #3
0
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;
}
static Ret ftk_animation_trigger_default_on_event(FtkAnimationTrigger* thiz, FtkAnimationEvent* evt)
{
	size_t i = 0;
	DECL_PRIV(thiz, priv);
	const char* hint = NULL;
	FtkBitmap* bitmap = NULL;
	FtkBitmap* old_bitmap = NULL;
	FtkBitmap* new_bitmap = NULL;
	FtkCanvas* save_canvas = NULL;
	FtkRect old_win_rect = {0,0,0,0};
	FtkRect new_win_rect = {0,0,0,0};
	char event_name[FTK_ANIM_EVENT_NAME_LEN];
	TypeAndAnimation* type_and_animation = NULL;

	return_val_if_fail(evt != NULL, RET_FAIL);
	return_val_if_fail(ftk_animation_trigger_default_ensure_canvas(thiz) == RET_OK, RET_FAIL);

	if(evt->type == FTK_EVT_SHOW)
	{
		hint = ftk_window_get_animation_hint(evt->new_window);
	}
	else
	{
		FtkColor bg = {0xff, 0xff, 0xff, 0xff};
		hint = ftk_window_get_animation_hint(evt->old_window);
		if(evt->new_window == NULL)
		{
			ftk_canvas_lock_buffer(priv->new_window, &bitmap);
			ftk_bitmap_clear(bitmap, bg);
			ftk_canvas_unlock_buffer(priv->new_window);
		}
	}

	if(hint[0] == '\0')
	{
		return RET_OK;
	}

	ftk_snprintf(event_name, FTK_ANIM_EVENT_NAME_LEN, "%s_%s", hint, evt->type == FTK_EVT_SHOW ? "show" : "hide");
	type_and_animation = ftk_animation_trigger_default_find_by_event(thiz, event_name);
	if(type_and_animation == NULL)
	{
		ftk_logd("%s: %s not exist.\n", __func__, event_name);
	}

	return_val_if_fail(type_and_animation != NULL, RET_FAIL);
	
	save_canvas = ftk_shared_canvas();
	
  	if(evt->old_window != NULL)
  	{
		ftk_window_disable_update(evt->old_window);
   		FTK_GET_PAINT_RECT(evt->old_window, old_win_rect);
		ftk_set_shared_canvas(priv->old_window);
		ftk_canvas_set_clip_region(priv->old_window, NULL);
    	ftk_window_paint_forcely(evt->old_window);
	}

	if(evt->new_window != NULL)
	{
		ftk_window_disable_update(evt->new_window);
   		FTK_GET_PAINT_RECT(evt->new_window, new_win_rect);
   		ftk_set_shared_canvas(priv->new_window);
		ftk_canvas_set_clip_region(priv->new_window, NULL);
		ftk_window_paint_forcely(evt->new_window);
	}

	ftk_set_shared_canvas(save_canvas);
	if(evt->old_window != NULL)
	{
    	ftk_window_enable_update(evt->old_window);
	}

	if(evt->new_window != NULL)
	{
    	ftk_window_enable_update(evt->new_window);
  	}

	ftk_canvas_lock_buffer(priv->old_window, &old_bitmap);
	ftk_canvas_lock_buffer(priv->new_window, &new_bitmap);

	for(i = 0; i < FTK_MAX_ANIMATION_NR; i++)
	{
		if(type_and_animation->animations[i] != NULL)
		{
			FtkAnimation* anim = type_and_animation->animations[i];
			ftk_animation_run(anim, old_bitmap, new_bitmap, &old_win_rect, &new_win_rect);
		}
	}

	ftk_canvas_unlock_buffer(priv->old_window);
	ftk_canvas_unlock_buffer(priv->new_window);

	ftk_logd("%s: type=%d %s - %s\n", __func__, evt->type, 
		evt->old_window != NULL ? ftk_widget_get_text(evt->old_window) : "null",
		evt->new_window != NULL ? ftk_widget_get_text(evt->new_window) : "null");

	return RET_OK;
}