コード例 #1
0
ファイル: LCUI_Label.c プロジェクト: soar-penguin/LCUI
static void 
Update_Label(LCUI_Widget *widget)
/* 功能:更新label部件 */
{
	int mode; 
	LCUI_Size max;
	LCUI_Label *label;
	
	label = Get_Widget_PrivData( widget );
	if(!Graph_Valid(&widget->background_image)) {
		mode = GRAPH_MIX_FLAG_REPLACE; /* 替换模式 */
	} else {
		mode = GRAPH_MIX_FLAG_OVERLAY; /* 叠加模式 */ 
	}
	/* 先绘制文本位图,在绘制前它会更新位图尺寸 */
	TextLayer_Draw( widget, &label->layer, mode );
	/* 获取尺寸 */
	max = TextLayer_Get_Size( &label->layer );
	if( widget->dock == DOCK_TYPE_NONE && label->auto_size
	 && Size_Cmp( max, widget->size ) != 0 ) {
		/* 如果开启了自动调整大小,并且尺寸有改变 */ 
		Resize_Widget(widget, max );
		Refresh_Widget(widget);
	}
}
コード例 #2
0
ファイル: LCUI_TextBox.c プロジェクト: soar-penguin/LCUI
static int
TextBox_ScrollBar_Update_Pos( LCUI_Widget *widget )
/* 更新滚动条的位置 */
{
	static ScrollBar_Data scrollbar_data;
	static LCUI_Pos area_pos;
	static LCUI_Size layer_size, area_size;
	static LCUI_Widget *scrollbar[2];
	static LCUI_TextLayer *layer;
	
	area_size = Get_Container_Size( widget ); 
	scrollbar[0] = TextBox_Get_Scrollbar( widget, 0 );
	scrollbar[1] = TextBox_Get_Scrollbar( widget, 1 ); 
	if( scrollbar[0]->visible ) {
		area_size.w -= Get_Widget_Width( scrollbar[0] );
	}
	if( scrollbar[1]->visible ) {
		area_size.h -= Get_Widget_Height( scrollbar[1] );
	}
	
	if( area_size.h <= 0 || area_size.w <= 0 ) {
		return -1;
	}
	
	layer = TextBox_Get_TextLayer( widget );
	if( !layer->enable_multiline ) {
		return 1;
	}
	layer_size = TextLayer_Get_Size( layer );
	if( layer_size.h <= 0 || layer_size.w <= 0 ) {
		return -2;
	}
	area_pos = TextBox_ViewArea_Get_Pos( widget );
	ScrollBar_Set_MaxNum( scrollbar[0], layer_size.h - area_size.h );
	
	if( area_pos.y + area_size.h > layer_size.h ) {
		area_pos.y = layer_size.h - area_size.h;
	}
	if( area_pos.x + area_size.w > layer_size.w ) {
		area_pos.x = layer_size.w - area_size.w;
	}
	if( area_pos.y < 0 ) {
		area_pos.y = 0;
	}
	if( area_pos.x < 0 ) {
		area_pos.x = 0;
	}
	ScrollBar_Set_CurrentNum( scrollbar[0], area_pos.y ); 
	scrollbar_data = ScrollBar_Get_Data( scrollbar[0] );
	TextBox_VertScroll_TextLayer( scrollbar_data, widget );
	
	ScrollBar_Set_MaxNum( scrollbar[1], layer_size.w - area_size.w );
	ScrollBar_Set_CurrentNum( scrollbar[1], area_pos.x );
	scrollbar_data = ScrollBar_Get_Data( scrollbar[1] );
	TextBox_HoriScroll_TextLayer( scrollbar_data, widget );
	return 0;
}
コード例 #3
0
ファイル: LCUI_Label.c プロジェクト: dwdcth/LCUI
static void Update_Label(LCUI_Widget *widget)
/* 功能:更新label部件 */
{
	int mode; 
	LCUI_Size max;
	LCUI_TextLayer *layer;
	
	layer = Get_Widget_PrivData( widget );
	max = TextLayer_Get_Size( layer );  
	if( widget->auto_size && Size_Cmp( max, widget->size ) != 0 ) {
		/* 如果开启了自动调整大小,并且尺寸有改变 */ 
		Resize_Widget(widget, max );
		Refresh_Widget(widget);
		return;
	}
	if(!Graph_Valid(&widget->background_image)) {
		mode = GRAPH_MIX_FLAG_REPLACE; /* 替换模式 */
	} else {
		mode = GRAPH_MIX_FLAG_OVERLAY; /* 叠加模式 */ 
	}
	layer = Get_Widget_PrivData( widget );
	TextLayer_Draw( widget, layer, mode );
}
コード例 #4
0
ファイル: LCUI_TextBox.c プロジェクト: soar-penguin/LCUI
int
TextBox_ViewArea_Update( LCUI_Widget *widget )
/* 更新文本框的文本显示区域 */
{
	static int cursor_h;
	static ScrollBar_Data scrollbar_data;
	static LCUI_Pos cursor_pos, area_pos;
	static LCUI_Size layer_size, area_size;
	static LCUI_Widget *scrollbar[2];
	static LCUI_TextLayer *layer;
	//printf("TextBox_ViewArea_Update(): enter\n");
	/* 获取显示区域的尺寸 */
	area_size = Get_Container_Size( widget );
	/* 获取滚动条 */
	scrollbar[0] = TextBox_Get_Scrollbar( widget, 0 );
	scrollbar[1] = TextBox_Get_Scrollbar( widget, 1 );
	/* 如果滚动条可见,那么区域尺寸就需要减去滚动条占用的尺寸 */
	if( scrollbar[0]->visible ) {
		area_size.w -= Get_Widget_Width( scrollbar[0] );
	}
	if( scrollbar[1]->visible ) {
		area_size.h -= Get_Widget_Height( scrollbar[1] );
	}
	
	if( area_size.h <= 0 || area_size.w <= 0 ) {
		return -1;
	}
	
	layer = TextBox_Get_TextLayer( widget );
	layer_size = TextLayer_Get_Size( layer );
	if( layer_size.h <= 0 || layer_size.w <= 0 ) {
		return -2;
	}
	/* 获取显示区域的位置 */
	area_pos = TextBox_ViewArea_Get_Pos( widget );
	/* 获取光标的坐标 */
	cursor_pos = TextLayer_Get_Cursor_FixedPixelPos( layer );
	/* 获取当前行的最大高度作为光标的高度 */
	cursor_h = TextLayer_CurRow_Get_MaxHeight( layer );
	
	/* 设定滚动条的数据中的最大值 */
	ScrollBar_Set_MaxNum( scrollbar[0], layer_size.h - area_size.h );
	
	DEBUG_MSG("cursor_pos: %d,%d\n", cursor_pos.x, cursor_pos.y);
	DEBUG_MSG("area_rect: %d,%d,%d,%d\n", 
		area_pos.x, area_pos.y,area_size.w, area_size.h );
	DEBUG_MSG("layer_size: %d,%d\n", layer_size.w, layer_size.h);
	
	/* 检测光标Y轴坐标是否超出显示区域的范围 */
	if( cursor_pos.y < area_pos.y ) {
		area_pos.y = cursor_pos.y;
	}
	if(cursor_pos.y + cursor_h > area_pos.y + area_size.h ) {
		area_pos.y = cursor_pos.y + cursor_h - area_size.h;
	}
	/* 如果显示区域在Y轴上超过文本图层的范围 */
	if( area_pos.y + area_size.h > layer_size.h ) {
		area_pos.y = layer_size.h - area_size.h;
	}
	if( area_pos.y < 0 ) {
		area_pos.y = 0;
	}
	/* 设定滚动条的数据中的当前值 */
	ScrollBar_Set_CurrentNum( scrollbar[0], area_pos.y );
	/* 获取滚动条的数据,供滚动文本层利用 */
	scrollbar_data = ScrollBar_Get_Data( scrollbar[0] );
	
	//printf("scrollbar_data: size: %d / %d, num: %d / %d\n", 
	//scrollbar_data.current_size, scrollbar_data.max_size, 
	//scrollbar_data.current_num, scrollbar_data.max_num);
	/* 根据数据,滚动文本图层至响应的位置,也就是移动文本显示区域 */
	TextBox_VertScroll_TextLayer( scrollbar_data, widget );
	
	/* 设定滚动条的数据中的最大值 */
	ScrollBar_Set_MaxNum( scrollbar[1], layer_size.w - area_size.w );
	
	if( cursor_pos.x < area_pos.x ) {
		area_pos.x = cursor_pos.x;
	}
	if(cursor_pos.x +5 > area_pos.x + area_size.w ) {
		area_pos.x = cursor_pos.x+5 - area_size.w;
	}
	if( area_pos.x + area_size.w > layer_size.w ) {
		area_pos.x = layer_size.w - area_size.w;
	}
	if( area_pos.x < 0 ) {
		area_pos.x = 0;
	}
	/* 设定滚动条的数据中的当前值 */
	ScrollBar_Set_CurrentNum( scrollbar[1], area_pos.x );
	/* 获取滚动条的数据,供滚动文本层利用 */
	scrollbar_data = ScrollBar_Get_Data( scrollbar[1] );
	
	//printf("scrollbar_data: size: %d / %d, num: %d / %d\n", 
	//scrollbar_data.current_size, scrollbar_data.max_size, 
	//scrollbar_data.current_num, scrollbar_data.max_num);
	TextBox_HoriScroll_TextLayer( scrollbar_data, widget );
	//printf("TextBox_ViewArea_Update(): quit\n");
	return 0;
}
コード例 #5
0
ファイル: LCUI_TextBox.c プロジェクト: soar-penguin/LCUI
static void 
TextBox_ScrollBar_Update_Size( LCUI_Widget *widget )
/* 更新滚动条的长度 */
{
	int tmp;
	char size_str[15];
	LCUI_Size area_size, layer_size;
	LCUI_Widget *scrollbar[2], *label;
	LCUI_TextLayer *layer;
	
	label = TextBox_Get_Label( widget );
	/* 获取文本图层 */
	layer = TextBox_Get_TextLayer( widget );
	
	/* 获取文本图层和文本框区域的尺寸 */
	layer_size = TextLayer_Get_Size( layer );
	area_size = Get_Container_Size( widget );
	/* 获取纵向和横向滚动条 */
	scrollbar[0] = TextBox_Get_Scrollbar( widget, 0 );
	scrollbar[1] = TextBox_Get_Scrollbar( widget, 1 );
	
	/* 如果文本图层高度超过显示区域 */
	if( layer->enable_multiline && area_size.h > 0 
	  && layer_size.h > area_size.h ) {
		tmp = area_size.w - Get_Widget_Width( scrollbar[0] );
		snprintf( size_str, sizeof(size_str)-1, "%dpx", tmp );
		Set_Widget_Size( label, size_str, NULL );
		
		/* 修改滚动条中记录的最大值和当前值,让滚动条在更新后有相应的长度 */
		ScrollBar_Set_MaxSize( scrollbar[0], layer_size.h );
		ScrollBar_Set_CurrentSize( scrollbar[0], area_size.h );
		Show_Widget( scrollbar[0] );
		/* 如果横向滚动条可见 */
		if( scrollbar[1]->visible ) {
			tmp = area_size.h - Get_Widget_Height( scrollbar[1] );
			snprintf( size_str, sizeof(size_str)-1, "%dpx", tmp );
			Set_Widget_Size( scrollbar[0], NULL, size_str );
		} else {
			Set_Widget_Size( scrollbar[0], NULL, "100%" );
		}
	} else {
		/* 不需要显示滚动条 */
		Hide_Widget( scrollbar[0] );
		Set_Widget_Size( label, "100%", NULL );
	}
	/* 和上面的处理基本一样,这个是处理横向滚动条 */
	if( layer->enable_multiline &&
	 area_size.w > 0 && layer_size.w > area_size.w ) {
		tmp = area_size.h - Get_Widget_Height( scrollbar[1] );
		snprintf( size_str, sizeof(size_str)-1, "%dpx", tmp );
		Set_Widget_Size( label, NULL, size_str );
		
		ScrollBar_Set_MaxSize( scrollbar[1], layer_size.w );
		ScrollBar_Set_CurrentSize( scrollbar[1], area_size.w );
		Show_Widget( scrollbar[1] );
		
		if( scrollbar[0]->visible ) {
			tmp = area_size.w - Get_Widget_Width( scrollbar[0] );
			snprintf( size_str, sizeof(size_str)-1, "%dpx", tmp );
			Set_Widget_Size( scrollbar[1], size_str, NULL );
		} else {
			Set_Widget_Size( scrollbar[1], "100%", NULL );
		}
	} else {
		Set_Widget_Size( label, NULL, "100%" );
		Hide_Widget( scrollbar[1] );
	}
}