示例#1
0
int 
TextLayer_CurRow_Get_MaxHeight( LCUI_TextLayer *layer )
/* 获取当前行的最大高度 */
{
	Text_RowData *row_ptr;
	row_ptr = TextLayer_Get_Current_RowData( layer );
	if( !row_ptr ) {
		return layer->default_data.pixel_size + 2;
	}
	return row_ptr->max_size.h;
}
示例#2
0
文件: text_layer.c 项目: dwdcth/LCUI
void
TextLayer_Text_Process( LCUI_TextLayer *layer, char *new_text )
/* 对文本进行预处理,处理后的数据保存至layer里 */ 
{
	int total; 
	uint32_t rows, n_ignore = 0;
	wchar_t *finish, *buff, *p, *q;
	
	DEBUG_MSG("%s\n", new_text);
	
	LCUI_CharData char_data; 
	Text_RowData *current_row_data;
	
	/* 如果有选中的文本,那就删除 */
	//......  
	total = Char_To_Wchar_T( new_text, &buff );
	current_row_data = TextLayer_Get_Current_RowData ( layer );
	if( !current_row_data ) {
		TextLayer_Text_Add_NewRow( layer );
		current_row_data = TextLayer_Get_Current_RowData ( layer );
	}
	
	FontBMP_Init( &char_data.bitmap );
	/* 根据样式标签生成对应的样式数据 */
	for(p=buff, finish=buff+total; p<finish; ++p) { 
		if( layer->using_style_tags ) {
			/* 处理样式的结束标签 */ 
			q = handle_style_endtag ( layer, p );
			if(q != NULL) {
				/* 计算需忽略的字符数 */
				n_ignore = q-p+1;
			} else {
				/* 处理样式标签 */
				q = handle_style_tag ( layer, p ); 
				if( q != NULL ) {
					n_ignore = q-p+1;
				}
			}
		}
		if(*p == '\n') { 
			/* 计算需要忽略的换行符的数量 */
			for( n_ignore=0,q=p; *q == '\n'; ++q,++n_ignore);
		} 
		if(n_ignore > 0) {
			/* 被忽略的字符的属性都一样,所以只需赋一次值 */
			char_data.data = NULL;
			char_data.display = IS_FALSE; 
			char_data.need_update = IS_FALSE; 
			FontBMP_Init( &char_data.bitmap ); 
		}
		while(n_ignore > 0) { 
			char_data.char_code = *p++;
			Queue_Insert( &layer->text_source_data, 
				layer->current_src_pos, &char_data );
			/* 遇到换行符,那就增加新行 */
			if(char_data.char_code == '\n') {
				rows = TextLayer_Text_Add_NewRow( layer ); 
				current_row_data = Queue_Get( &layer->rows_data, rows );
				layer->current_des_pos.x = 0;
				layer->current_des_pos.y = rows;
			} else {
				++layer->current_src_pos; 
			}
			--n_ignore;
			if(n_ignore == 0) {
				n_ignore = -1;
				break;
			}
		}
		if(n_ignore == -1) {
			--p; n_ignore = 0;
			continue;
		}
		
		char_data.char_code = *p;
		char_data.display = TRUE; 
		char_data.need_update = TRUE; 
		char_data.data = TextLayer_Get_Current_TextStyle( layer );  
		Queue_Insert( &layer->text_source_data, layer->current_src_pos, &char_data ); 
		Queue_Insert( &current_row_data->string, layer->current_des_pos.x, &char_data ); 
		
		++layer->current_src_pos;
		++layer->current_des_pos.x; 
	}
}