Esempio n. 1
0
File: event.c Progetto: aem3372/LCUI
/** 创建一个事件容器实例 */
LCUI_EventBox $(Create)(void)
{
	LCUI_EventBox box;
	box = NEW_ONE(struct LCUI_EventBoxRec_);
	box->event_id = 100;
	box->handler_id = 100;
	box->current = 0;
	RBTree_Init( &box->event_slot );
	RBTree_Init( &box->event_name );
	RBTree_Init( &box->event_handler );
	RBTree_Init( &box->used_evnet_id );
	RBTree_OnJudge( &box->event_name, CompareEventName );
	RBTree_OnDestroy( &box->event_handler, DestroyEventHandler );
	RBTree_OnDestroy( &box->event_slot, DestroyEventSlot );
	RBTree_SetDataNeedFree( &box->event_handler, 0 );
	RBTree_SetDataNeedFree( &box->event_name, 0 );
	RBTree_SetDataNeedFree( &box->used_evnet_id, 0 );
	LinkedList_Init( &box->events[0], sizeof(LCUI_Event) );
	LinkedList_Init( &box->events[1], sizeof(LCUI_Event) );
	LinkedList_SetDataNeedFree( &box->events[0], 1 );
	LinkedList_SetDataNeedFree( &box->events[1], 1 );
	LinkedList_SetDestroyFunc( &box->events[0], DestroyEvent );
	LinkedList_SetDestroyFunc( &box->events[1], DestroyEvent );
	return box;
}
Esempio n. 2
0
static void AsyncLoadImage( LCUI_Widget widget, const char *path )
{
	ImageCache cache;
	LCUI_Task task = {0};
	LCUI_Style *s = &widget->cached_style->sheet[key_background_image];

	if( !is_inited ) {
		RBTree_Init( &images );
		RBTree_Init( &refs );
		RBTree_OnJudge( &refs, OnCompareWidget );
		RBTree_OnJudge( &images, OnComparePath );
		RBTree_OnDestroy( &refs, free );
		RBTree_OnDestroy( &images, OnDestroyCache );
		is_inited = TRUE;
	}
	if( s->is_valid && s->type == SVT_STRING ) {
		cache = RBTree_CustomGetData( &images, s->string );
		if( cache ) {
			DelRef( widget, cache );
		}
	}
	cache = RBTree_CustomGetData( &images, path );
	if( cache ) {
		AddRef( widget, cache );
		Graph_Quote( &widget->computed_style.background.image,
			     &cache->image, NULL );
		Widget_AddTask( widget, WTT_BODY );
		return;
	}
	task.func = ExecLoadImage;
	task.arg[0] = widget;
	task.arg[1] = strdup( path );
	LCUI_AddTask( &task );
}
Esempio n. 3
0
LCUI_API LCUI_FontBMP*
FontLIB_AddFontBMP(	wchar_t char_code, int font_id,
			int pixel_size, LCUI_FontBMP *fontbmp )
{
	LCUI_FontBMP *bmp_cache;
	LCUI_RBTree *tree_font, *tree_bmp;

	if( !fontlib.is_inited ) {
		return NULL;
	}
	/* 获取字符的字体信息集 */
	tree_font = (LCUI_RBTree*)
	RBTree_GetData( &fontlib.bitmap_cache, char_code );
	if( !tree_font ) {
		tree_font = (LCUI_RBTree*)malloc( sizeof(LCUI_RBTree) );
		if( !tree_font ) {
			return NULL;
		}
		RBTree_Init( tree_font );
		RBTree_SetDataNeedFree( tree_font, TRUE );
		RBTree_OnDestroy( tree_font, FontLIB_DestroyTreeNode );
		RBTree_Insert( &fontlib.bitmap_cache, char_code, tree_font );
	}
	/* 当字体ID不大于0时,使用内置字体 */
	if( font_id <= 0 ) {
		font_id = fontlib.incore_font->id;
	}
	/* 获取相应字体样式标识号的字体位图库 */
	tree_bmp = (LCUI_RBTree*)RBTree_GetData( tree_font, font_id );
	if( !tree_bmp ) {
		tree_bmp = (LCUI_RBTree*)malloc( sizeof(LCUI_RBTree) );
		if( !tree_bmp ) {
			return NULL;
		}
		RBTree_Init( tree_bmp );
		RBTree_OnDestroy( tree_bmp, FontLIB_DestroyFontBitmap );
		RBTree_SetDataNeedFree( tree_bmp, TRUE );
		RBTree_Insert( tree_font, font_id, tree_bmp );
	}
	/* 在字体位图库中获取指定像素大小的字体位图 */
	bmp_cache = (LCUI_FontBMP*)RBTree_GetData( tree_bmp, pixel_size );
	if( !bmp_cache ) {
		bmp_cache = (LCUI_FontBMP*)malloc( sizeof(LCUI_FontBMP) );
		if( !bmp_cache ) {
			return NULL;
		}
		RBTree_Insert( tree_bmp, pixel_size, bmp_cache );
	}
	/* 拷贝数据至该空间内 */
	memcpy( bmp_cache, fontbmp, sizeof(LCUI_FontBMP) );
	return bmp_cache;
}
Esempio n. 4
0
void LCUI_InitKeyboard(void)
{
	LCUIMutex_Init(&self.mutex);
	RBTree_Init(&self.state_tree);
	RBTree_OnDestroy(&self.state_tree, free);
	LCUI_BindEvent(LCUI_KEYDOWN, OnKeyboardEvent, NULL, NULL);
	LCUI_BindEvent(LCUI_KEYUP, OnKeyboardEvent, NULL, NULL);
}
Esempio n. 5
0
void LCUIWidget_InitRenderer( void )
{
	RBTree_Init( &self.groups );
	RBTree_OnCompare( &self.groups, OnCompareGroup );
	RBTree_OnDestroy( &self.groups, OnDestroyGroup );
	LinkedList_Init( &self.rects );
	self.active = TRUE;
}
Esempio n. 6
0
void FontLIB_Init( void )
{
	if( fontlib.is_inited ) {
		return;
	}
	RBTree_Init( &fontlib.bitmap_cache );
	RBTree_Init( &fontlib.info_cache );
	RBTree_OnDestroy( &fontlib.bitmap_cache, FontLIB_DestroyTreeNode );
	RBTree_SetDataNeedFree( &fontlib.bitmap_cache, TRUE );
	RBTree_SetDataNeedFree( &fontlib.info_cache, TRUE );
#ifdef LCUI_FONT_ENGINE_FREETYPE
	/* 当初始化库时发生了一个错误 */
	if( FT_Init_FreeType(&fontlib.library) ) {
		_DEBUG_MSG("failed to initialize.\n");
		return;
	}
#else
	fontlib.library = NULL;
#endif
	fontlib.is_inited = TRUE;
}