Ejemplo n.º 1
0
/** 添加已被按下的按键 */
void LCUIKeyBoard_HitKey( int key_code )
{
	clock_t ct;
	key_state data, *data_ptr;

	LCUIMutex_Lock( &record_mutex );
	ct = clock()*1000 / CLOCKS_PER_SEC;
	data_ptr = KeyStateRecord_FindData( key_code );
	if( !data_ptr ) {
		data.key_code = key_code;
		data.interval_time = -1;
		data.hit_time = ct;
		data.state = LCUIKEYSTATE_PRESSED;
		LinkedList_AddDataCopy( &key_state_record, &data );
		LCUIMutex_Unlock( &record_mutex );
		return;
	}
	if( data_ptr->state == LCUIKEYSTATE_RELEASE ) {
		data_ptr->state = LCUIKEYSTATE_PRESSED;
		/* 记录与上次此键被按下时的时间间隔 */
		data_ptr->interval_time = ct - data_ptr->hit_time;
		/* 记录本次此键被按下时的时间 */
		data_ptr->hit_time = ct;
	}
	LCUIMutex_Unlock( &record_mutex );
}
Ejemplo n.º 2
0
/** 
 * 功能:注册设备
 * 说明:为指定设备添加处理函数
 * */
int LCUIDevice_Add(	LCUI_BOOL (*init)(void), 
			LCUI_BOOL (*proc)(void),
			LCUI_BOOL (*exit)(void) )
{
	DeviceData device, *p;
	device.init = init;
	device.proc = proc;
	device.exit = exit;
	LCUIMutex_Lock( &list_mutex );
	p = (DeviceData*)LinkedList_AddDataCopy( &dev_list, &device );
	LCUIMutex_Unlock( &list_mutex );
	if( !p ) {
		return -1;
	}
	if( device.init ) {
		device.init();
	}
	return 0;
}
Ejemplo n.º 3
0
/** 更新数据 */
void TextLayer_Update( LCUI_TextLayer* layer, LinkedList *rect_list )
{
	if( layer->task.update_bitmap ) {
		TextLayer_InvalidateAllRowRect( layer );
		TextLayer_ReloadCharBitmap( layer );
		TextLayer_InvalidateAllRowRect( layer );
		layer->task.update_bitmap = FALSE;
		layer->task.redraw_all = TRUE;
	}

	if( layer->task.update_typeset ) {
		TextLayer_TextTypeset( layer, layer->task.typeset_start_row );
		layer->task.update_typeset = FALSE;
		layer->task.typeset_start_row = 0;
	}

	/* 如果坐标偏移量有变化,记录各个文本行区域 */
	if( layer->new_offset_x != layer->offset_x
	 || layer->new_offset_y != layer->offset_y ) {
		TextLayer_InvalidateAllRowRect( layer );
		layer->offset_x = layer->new_offset_x;
		layer->offset_y = layer->new_offset_y;
		TextLayer_InvalidateAllRowRect( layer );
		layer->task.redraw_all = TRUE;
	}
	
	if( rect_list ) {
		int n;
		void *data_ptr;

		n = LinkedList_GetTotal( &layer->dirty_rect );
		LinkedList_Goto( &layer->dirty_rect, 0 );
		/* 转移脏矩形记录,供利用 */
		while(n--) {
			data_ptr = LinkedList_Get( &layer->dirty_rect );
			LinkedList_AddDataCopy( rect_list, data_ptr );
			LinkedList_ToNext( &layer->dirty_rect );
		}
	 } 
}
Ejemplo n.º 4
0
Archivo: event.c Proyecto: aem3372/LCUI
/** 将事件投递给事件处理器,等待处理 */
int $(Post)(	LCUI_EventBox box, const char *name, void *data,
		 void (*destroy_data)(void*) )
{
	LCUI_Event event;
	LCUI_RBTreeNode *node;
	LCUI_EventSlot *slot;
	LinkedList *elist = &box->events[box->current];
	
	if( !(node = RBTree_CustomSearch(&box->event_name, (const void*)name)) ) {
		return -1;
	}
	if( !(node = RBTree_Search(&box->event_slot, node->key)) ) {
		return -2;
	}
	slot = (LCUI_EventSlot*)node->data;
	event.id = slot->id;
	event.name =slot->name;
	event.data = data;
	event.destroy_data = destroy_data;
	LinkedList_AddDataCopy( elist, &event );
	return 0;
}