Ejemplo n.º 1
0
static void Widget_ComputeSize(LCUI_Widget w)
{
	float width, height;
	float max_width = -1, default_width = -1;

	Widget_ComputeLimitSize(w);
	width = ComputeXMetric(w, key_width);
	height = ComputeYMetric(w, key_height);
	if (width > 0) {
		width = Widget_GetLimitedWidth(w, width);
	}
	if (height > 0) {
		height = Widget_GetLimitedHeight(w, height);
	}
	if (!Widget_HasAutoStyle(w, key_width) &&
	    !Widget_HasAutoStyle(w, key_height)) {
		if (w->computed_style.box_sizing == SV_CONTENT_BOX) {
			width = ToBorderBoxWidth(w, width);
			height = ToBorderBoxHeight(w, height);
		}
		Widget_SetSize(w, width, height);
		return;
	}
	if (w->computed_style.box_sizing == SV_BORDER_BOX) {
		width = ToContentBoxWidth(w, width);
		height = ToContentBoxHeight(w, height);
	}
	if (Widget_HasAutoStyle(w, key_width) &&
	    Widget_HasFillAvailableWidth(w)) {
		width = Widget_ComputeFillAvailableWidth(w);
		width = ToContentBoxWidth(w, width);
		if (!Widget_HasStaticWidthParent(w)) {
			default_width = w->parent->box.content.width;
			if (w->computed_style.box_sizing == SV_BORDER_BOX) {
				default_width =
				    ToContentBoxWidth(w, default_width);
			}
			max_width = width;
			width = 0;
		}
	}
	Widget_ComputeContentSize(w, &width, &height);
	if (default_width != -1 && width < default_width) {
		width = default_width;
	}
	if (max_width != -1 && width > max_width) {
		width = max_width;
	}
	if (w->computed_style.box_sizing == SV_BORDER_BOX) {
		width = ToBorderBoxWidth(w, width);
		height = ToBorderBoxHeight(w, height);
	}
	Widget_SetSize(w, width, height);
}
Ejemplo n.º 2
0
void GameWindow_InitLicenseWindow(void)
{
	window = Widget_New("window");
	label_license = Widget_New("label");
	textbox_license = Widget_New("text_box");
	box = Widget_New(NULL);
	btn_ok = Widget_New("button");

	Window_ClientArea_Add( window, label_license );
	Window_ClientArea_Add( window, box );
	Window_ClientArea_Add( window, btn_ok );
	Widget_Container_Add( box, textbox_license );
	
	Widget_SetBackgroundColor( label_license, RGB(255,255,255) );
	Widget_SetBackgroundTransparent( label_license, FALSE );
	
	Widget_SetAlign( label_license, ALIGN_TOP_CENTER, Pos(0,0) );
	Widget_SetAlign( box, ALIGN_TOP_CENTER, Pos(0,8) );
	Widget_SetAlign( btn_ok, ALIGN_BOTTOM_CENTER, Pos(0,-5) );

	Label_TextW( label_license, TEXT_LICENSE );
	Button_TextW( btn_ok, TEXT_OK );
	TextBox_SetAutoWrap( textbox_license, TRUE );
	TextBox_SetMultiline( textbox_license, TRUE );
	TextBox_SetReadOnly( textbox_license, TRUE );
	TextBox_SetUsingStyleTags( textbox_license, TRUE );
	TextBox_TextW( textbox_license, license_text );
	TextBox_ShowCursor( textbox_license, FALSE );

	Widget_SetStyleID( window, WINDOW_STYLE_LINE );
	Widget_SetPadding( Window_GetClientArea(window), Padding(10,10,10,10) );
	Widget_SetAutoSize( btn_ok, FALSE, 0 );

	Widget_SetBorder( box, Border(1,BORDER_STYLE_SOLID,RGB(200,200,200)) );
	Widget_SetPadding( box, Padding(10,10,10,10) );
	Widget_SetSize( box, "100%", "280px" );
	Widget_SetSize( textbox_license, "100%", "100%" );

	Widget_Resize( window, WINDOW_SIZE );
	Widget_Resize( btn_ok, BTN_SIZE );

	Widget_ConnectEvent( btn_ok, EVENT_CLICKED, btn_ok_on_clicked );

	Widget_Show( textbox_license );
	Widget_Show( box );
	Widget_Show( label_license );
	Widget_Show( btn_ok );
}
Ejemplo n.º 3
0
/*
 * 创建一个部件,作为滚动条的容器
 * 再创建一个部件,作为滚动条
 * 限制滚动条的移动范围
 * */
static void 
ScrollBar_Init( LCUI_Widget *widget )
{
	LCUI_ScrollBar *scrollbar;
	
	scrollbar = WidgetPrivData_New(widget, sizeof(LCUI_ScrollBar));
	scrollbar->data.max_num = 100;
	scrollbar->data.current_num = 100;
	scrollbar->data.max_size = 100;
	scrollbar->data.current_size = 100;
	scrollbar->direction = 0;
	scrollbar->callback_func = NULL;
	
	scrollbar->widget = Widget_New("button");
	/* 禁用部件的自动尺寸调整 */
	Widget_SetAutoSize( scrollbar->widget, FALSE, 0 );
	
	Widget_Container_Add( widget, scrollbar->widget );
	Widget_SetSize( scrollbar->widget, "100%", "100%" );
	Widget_LimitPos( scrollbar->widget, Pos(0,0), Pos(0,0) );
	Widget_SetBorder( widget,
	 Border(1, BORDER_STYLE_SOLID, RGB(100,100,100)) );
	Widget_SetPadding( widget, Padding(1,1,1,1) );
	Widget_SetBackgroundColor( widget, RGB(200,200,200) );
	Widget_SetBackgroundTransparent( widget, FALSE );
	Widget_Show( scrollbar->widget );
	Widget_Event_Connect( scrollbar->widget, EVENT_DRAG, ScrollBar_Drag );
}
Ejemplo n.º 4
0
static void Window_OnUpdate( LCUI_Widget *window )
{
	LCUI_Window *wnd;
	LCUI_Border border;
	char h_str[20];

	wnd = (LCUI_Window*)Widget_GetPrivateData( window );
	border = Border( 1, BORDER_STYLE_SOLID, RGB(200,200,200) );
	border.top_width = TOP_PANDDING;
	/* 若窗口已获得焦点 */
	if( Widget_GetFocus( window ) ) {
		border.top_color = wnd->theme_color;
		border.bottom_color = wnd->theme_color;
		border.left_color = wnd->theme_color;
		border.right_color = wnd->theme_color;
		Widget_SetShadow( window, BoxShadow(0,0,8,wnd->theme_color) );
	} else {
		Widget_SetShadow( window, BoxShadow(0,0,8,ARGB(120,200,200,200)) );
	}
	Widget_SetBorder( window, border );
	/* 更新窗口标题栏上的关闭按钮 */
	Widget_Update( wnd->btn_close );
	sprintf( h_str, "%dpx", Widget_GetContainerHeight(window)-35 );
	Widget_SetSize( wnd->client_area, "100%", h_str );
}
Ejemplo n.º 5
0
static void 
ScrollBar_Update( LCUI_Widget *widget )
{
	static int pos, max_len;
	static double scale;
	static char scale_str[256];
	LCUI_ScrollBar *scrollbar;
	
	scrollbar = Widget_GetPrivData( widget );
	/* 计算比例,之后转换成字符串 */
	scale = scrollbar->data.current_size*1.0 / scrollbar->data.max_size; 
	sprintf( scale_str, "%.2lf%%", scale*100 );
	//_DEBUG_MSG("current_num: %d, max_num: %d\n", 
	//scrollbar->data.current_num, scrollbar->data.max_num);
	/* 判断滚动条的方向 */
	if( scrollbar->direction == 0 ) { /* 纵向 */
		Widget_SetSize( scrollbar->widget, NULL, scale_str );
		max_len = Widget_GetContainerHeight( widget );
		max_len -= _Widget_GetHeight( scrollbar->widget );
		Widget_LimitPos( scrollbar->widget, Pos(0,0), Pos( 0, max_len ) );
		
		scale = scrollbar->data.current_num*1.0 / scrollbar->data.max_num;
		pos = scale * max_len;
		//_DEBUG_MSG("num: %d / %d\n", 
		//scrollbar->data.current_num, scrollbar->data.max_num);
		//_DEBUG_MSG("ScrollBar_Update(), scale: %.2f\n", scale);
		//_DEBUG_MSG("ScrollBar_Update(), y: %d\n", pos);
		/* 移动滚动条 */
		Widget_Move( scrollbar->widget, Pos(0,pos) );
	} else { /* 横向 */ 
		Widget_SetSize( scrollbar->widget, scale_str, NULL );
		max_len = Widget_GetContainerWidth( widget );
		max_len -= _Widget_GetWidth( scrollbar->widget );
		Widget_LimitPos( scrollbar->widget, Pos(0,0), Pos(max_len,0) );
		scale = scrollbar->data.current_num*1.0 / scrollbar->data.max_num;
		pos = scale * max_len;
		//printf("ScrollBar_Update(), num: %d / %d\n", 
		//scrollbar->data.current_num, scrollbar->data.max_num);
		//printf("ScrollBar_Update(), scale: %.2f\n", scale);
		//printf("ScrollBar_Update(), x: %d\n", pos);
		Widget_Move( scrollbar->widget, Pos(pos, 0) );
	}
}
Ejemplo n.º 6
0
void Widget_AutoSize(LCUI_Widget w)
{
	float width = 0, height = 0;
	if (!Widget_CheckStyleType(w, key_width, scale)) {
		width = ComputeXMetric(w, key_width);
	}
	if (!Widget_CheckStyleType(w, key_height, scale)) {
		height = ComputeYMetric(w, key_height);
	}
	Widget_ComputeContentSize(w, &width, &height);
	width = Widget_GetAdjustedWidth(w, width);
	Widget_SetSize(w, ToBorderBoxWidth(w, width),
		       ToBorderBoxHeight(w, height));
}
Ejemplo n.º 7
0
static void thread(void *arg)
{
	LCUI_Widget *widget, *label;
	
	widget = (LCUI_Widget*)arg; 
	label = Widget_New( "label" );
	Widget_Container_Add( widget, label );
	Widget_SetAlign( label, ALIGN_MIDDLE_CENTER, Pos(0,0) );
	Widget_Show( label );
	while(LCUI_Active()) {
		Label_Text( label, "DOCK_TYPE_TOP" );
		Widget_SetDock( widget, DOCK_TYPE_TOP ); 
		Widget_SetSize( widget, "120px", "120px" ); 
		/* 还原尺寸 */
		LCUI_Sleep(1);
		Label_Text( label, "DOCK_TYPE_LEFT" );
		Widget_SetDock( widget, DOCK_TYPE_LEFT ); 
		Widget_SetSize( widget, "120px", "120px" ); 
		LCUI_Sleep(1);
		Label_Text( label, "DOCK_TYPE_RIGHT" );
		Widget_SetDock( widget, DOCK_TYPE_RIGHT ); 
		Widget_SetSize( widget, "120px", "120px" ); 
		LCUI_Sleep(1);
		Label_Text( label, "DOCK_TYPE_BOTTOM" );
		Widget_SetDock( widget, DOCK_TYPE_BOTTOM ); 
		Widget_SetSize( widget, "120px", "120px" ); 
		LCUI_Sleep(1);
		Label_Text( label, "DOCK_TYPE_FILL" );
		Widget_SetDock( widget, DOCK_TYPE_FILL ); 
		Widget_SetSize( widget, "120px", "120px" ); 
		LCUI_Sleep(1);
		Label_Text( label, "DOCK_TYPE_NONE" );
		Widget_SetDock( widget, DOCK_TYPE_NONE ); 
		Widget_SetSize( widget, "120px", "120px" );  
		LCUI_Sleep(1);
	}
	LCUIThread_Exit(NULL);
}
Ejemplo n.º 8
0
static void 
TextBox_ScrollBar_UpdateSize( 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_GetLabel( widget );
	/* 获取文本图层 */
	layer = TextBox_GetTextLayer( widget );
	
	/* 获取文本图层和文本框区域的尺寸 */
	layer_size = TextLayer_GetSize( layer );
	area_size = Widget_GetContainerSize( widget );
	/* 获取纵向和横向滚动条 */
	scrollbar[0] = TextBox_GetScrollbar( widget, 0 );
	scrollbar[1] = TextBox_GetScrollbar( widget, 1 );
	
	/* 如果文本图层高度超过显示区域 */
	if( layer->enable_multiline && area_size.h > 0 
	  && layer_size.h > area_size.h ) {
		tmp = area_size.w - Widget_GetWidth( scrollbar[0] );
#ifdef LCUI_BUILD_IN_LINUX
		snprintf( size_str, sizeof(size_str)-1, "%dpx", tmp );
#else
		sprintf_s( size_str, sizeof(size_str)-1, "%dpx", tmp );
#endif
		Widget_SetSize( label, size_str, NULL );
		
		/* 修改滚动条中记录的最大值和当前值,让滚动条在更新后有相应的长度 */
		ScrollBar_SetMaxSize( scrollbar[0], layer_size.h );
		ScrollBar_SetCurrentSize( scrollbar[0], area_size.h );
		Widget_Show( scrollbar[0] );
		/* 如果横向滚动条可见 */
		if( scrollbar[1]->visible ) {
			tmp = area_size.h - Widget_GetHeight( scrollbar[1] );
#ifdef LCUI_BUILD_IN_LINUX
			snprintf( size_str, sizeof(size_str)-1, "%dpx", tmp );
#else
			sprintf_s( size_str, sizeof(size_str)-1, "%dpx", tmp );
#endif
			Widget_SetSize( scrollbar[0], NULL, size_str );
		} else {
			Widget_SetSize( scrollbar[0], NULL, "100%" );
		}
	} else {
		/* 不需要显示滚动条 */
		Widget_Hide( scrollbar[0] );
		Widget_SetSize( label, "100%", NULL );
	}
	/* 和上面的处理基本一样,这个是处理横向滚动条 */
	if( layer->enable_multiline &&
	 area_size.w > 0 && layer_size.w > area_size.w ) {
		tmp = area_size.h - Widget_GetHeight( scrollbar[1] );
#ifdef LCUI_BUILD_IN_LINUX
		snprintf( size_str, sizeof(size_str)-1, "%dpx", tmp );
#else
		sprintf_s( size_str, sizeof(size_str)-1, "%dpx", tmp );
#endif
		Widget_SetSize( label, NULL, size_str );
		
		ScrollBar_SetMaxSize( scrollbar[1], layer_size.w );
		ScrollBar_SetCurrentSize( scrollbar[1], area_size.w );
		Widget_Show( scrollbar[1] );
		
		if( scrollbar[0]->visible ) {
			tmp = area_size.w - Widget_GetWidth( scrollbar[0] );
#ifdef LCUI_BUILD_IN_LINUX
			snprintf( size_str, sizeof(size_str)-1, "%dpx", tmp );
#else
			sprintf_s( size_str, sizeof(size_str)-1, "%dpx", tmp );
#endif
			Widget_SetSize( scrollbar[1], size_str, NULL );
		} else {
			Widget_SetSize( scrollbar[1], "100%", NULL );
		}
	} else {
		Widget_SetSize( label, NULL, "100%" );
		Widget_Hide( scrollbar[1] );
	}
}
Ejemplo n.º 9
0
static void 
TextBox_Init( LCUI_Widget *widget )
/* 初始化文本框相关数据 */
{
	LCUI_TextBox *textbox;
	
	widget->valid_state = WIDGET_STATE_ACTIVE | WIDGET_STATE_OVERLAY;
	widget->valid_state |= (WIDGET_STATE_NORMAL | WIDGET_STATE_DISABLE);
	textbox = WidgetPrivData_New(widget, sizeof(LCUI_TextBox));
	textbox->text = Widget_New( "label" );
	textbox->cursor = Widget_New( NULL );
	textbox->scrollbar[0] = Widget_New( "scrollbar" );
	textbox->scrollbar[1] = Widget_New( "scrollbar" );
	/* 不可获得焦点 */
	textbox->text->focus = FALSE;
	textbox->cursor->focus = FALSE;
	textbox->scrollbar[0]->focus = FALSE;
	textbox->scrollbar[1]->focus = FALSE;
	textbox->limit_mode = 0;
	textbox->block_size = 256;
	textbox->show_placeholder = FALSE;
	LCUIWString_Init( &textbox->placeholder );
	TextStyle_Init( &textbox->placeholder_style );
	TextStyle_FontColor( &textbox->placeholder_style, RGB(100,100,100) );
	Label_AutoSize( textbox->text, FALSE, 0 );
	Widget_SetSize( textbox->text, "100%", "100%" );
	
	/* 添加至相应的容器 */
	Widget_Container_Add( textbox->text, textbox->cursor ); 
	Widget_Container_Add( widget, textbox->text ); 
	Widget_Container_Add( widget, textbox->scrollbar[0] );
	Widget_Container_Add( widget, textbox->scrollbar[1] );
	/* 设置滚动条的尺寸 */
	Widget_SetSize( textbox->scrollbar[0], "10px", NULL );
	Widget_SetSize( textbox->scrollbar[1], NULL, "10px" );
	Widget_SetAlign( textbox->scrollbar[0], ALIGN_TOP_RIGHT, Pos(0,0) );
	Widget_SetAlign( textbox->scrollbar[1], ALIGN_BOTTOM_LEFT, Pos(0,0) );
	/* 滚动条设为横向 */
	ScrollBar_SetDirection( textbox->scrollbar[1], 1 );
	/* 将回调函数与滚动条连接 */
	ScrollBar_Connect( textbox->scrollbar[0], TextBox_TextLayer_VertScroll, widget );
	ScrollBar_Connect( textbox->scrollbar[1], TextBox_HoriScroll_TextLayer, widget );
	Widget_Show( textbox->text );
	
	Queue_Init( &textbox->text_block_buff, sizeof(LCUI_TextBlock), destroy_textblock );
	
	TextLayer_UsingStyleTags( Label_GetTextLayer(textbox->text), FALSE );
	Widget_SetPadding( widget, Padding(2,2,2,2) );
	Widget_SetBackgroundColor( textbox->cursor, RGB(0,0,0) );
	Widget_SetBackgroundTransparent( textbox->cursor, FALSE );
	Widget_SetBackgroundTransparent( widget, FALSE );
	
	Widget_Resize( textbox->cursor, Size(1, 14) );
	/* 设置可点击区域的alpha值要满足的条件 */
	Set_Widget_ClickableAlpha( textbox->cursor, 0, 1 );
	Set_Widget_ClickableAlpha( textbox->text, 0, 1 );
	
	/* 设定定时器,每1秒闪烁一次 */
	if( __timer_id == -1 ) {
		__timer_id = set_timer( 500, blink_cursor, TRUE );
	}
	Widget_Event_Connect( widget, EVENT_DRAG, TextBox_TextLayer_Click );
	/* 关联 FOCUS_OUT 和 FOCUS_IN 事件 */
	Widget_Event_Connect( widget, EVENT_FOCUSOUT, _putout_textbox_cursor );
	Widget_Event_Connect( widget, EVENT_FOCUSIN, _putin_textbox_cursor );
	/* 关联按键输入事件 */
	Widget_Event_Connect( widget, EVENT_KEYBOARD, TextBox_Input );
	/* 默认不启用多行文本模式 */
	TextBox_Multiline( widget, FALSE );
}
Ejemplo n.º 10
0
Archivo: mora.c Proyecto: yydaor/LCUI
static void
widgets_configure( void )
{
	/* 设定标题栏显示的文本 */
	Window_SetTitleText( window, TEXT_WND_TITLE );
	Window_SetTitleIcon( window, &icon );
	Widget_Resize( window, WND_SIZE );
	/* 将部件加入至相应的容器 */
	Widget_Container_Add( btn_area, btn_s );
	Widget_Container_Add( btn_area, btn_j );
	Widget_Container_Add( btn_area, btn_b );
	Widget_Container_Add( btn_area, btn_next );
	Window_ClientArea_Add( window, label );
	Window_ClientArea_Add( window, l_vs );
	Window_ClientArea_Add( window, me_pic_box );
	Window_ClientArea_Add( window, cpu_pic_box );
	Window_ClientArea_Add( window, btn_area );

	/* 设定label部件显示的文本内容 */
	Label_Text( label,  TEXT_TIP );
	
	/* 设定label部件中的字体大小为55像素,颜色为红色 */
	Label_Text( l_vs, TEXT_VS );
	/* 禁用按钮的自动尺寸调整 */
	Widget_SetAutoSize( btn_b, FALSE, 0 );
	Widget_SetAutoSize( btn_s, FALSE, 0 );
	Widget_SetAutoSize( btn_j, FALSE, 0 );
	Widget_SetAutoSize( btn_next, FALSE, 0 );
	/* 调整这些部件的大小 */
	Widget_SetSize( btn_b, "78px", "30px" );
	Widget_SetSize( btn_s, "77px", "30px" );
	Widget_SetSize( btn_j, "77px", "30px" );
	Widget_SetSize( btn_next, "78px", "30px" );
	Widget_SetSize( btn_area, NULL, "30px" );
	Widget_SetDock( btn_area, DOCK_TYPE_BOTTOM );
	Widget_Resize( me_pic_box, Size(110, 140) );
	Widget_Resize( cpu_pic_box, Size(110, 140) );
	/* 自定义这四个按钮的风格 */
	Button_CustomStyle(	btn_b, &btn_normal, &btn_over, 
				&btn_down, &btn_focus, NULL); 
	Button_CustomStyle(	btn_s, &btn_normal, &btn_over,
				&btn_down, &btn_focus, NULL); 
	Button_CustomStyle(	btn_j, &btn_normal, &btn_over, 
				&btn_down, &btn_focus, NULL); 
	Button_CustomStyle(	btn_next, &btn_normal, &btn_over, 
				&btn_down, &btn_focus, NULL); 
	/* 设定部件的定位类型 */
	Widget_SetPosType( btn_s, POS_TYPE_STATIC );
	Widget_SetPosType( btn_j, POS_TYPE_STATIC );
	Widget_SetPosType( btn_b, POS_TYPE_STATIC );
	Widget_SetPosType( btn_next, POS_TYPE_STATIC );
	/* 设定布局 */
	Widget_SetAlign(me_pic_box, ALIGN_MIDDLE_LEFT, Pos(5, -5));
	Widget_SetAlign(cpu_pic_box, ALIGN_MIDDLE_RIGHT, Pos(-5, -5));
	Widget_SetAlign(label, ALIGN_TOP_CENTER, Pos(0, 3));
	Widget_SetAlign(l_vs, ALIGN_MIDDLE_CENTER, Pos(0, 0));
	/* 设定部件的边框及颜色 */
	Widget_SetBorder(me_pic_box, Border(1, BORDER_STYLE_SOLID, RGB(0,0,0)));
	Widget_SetBorder(cpu_pic_box, Border(1, BORDER_STYLE_SOLID, RGB(0,0,0)));
	/* 关联这些按钮的单击事件 */ 
	Widget_Event_Connect(btn_s, EVENT_CLICKED, select_stone );
	Widget_Event_Connect(btn_j, EVENT_CLICKED, select_knife );
	Widget_Event_Connect(btn_b, EVENT_CLICKED, select_cloth );
	Widget_Event_Connect(btn_next, EVENT_CLICKED, next );
	Widget_Event_Connect(Window_GetCloseButton(window), EVENT_CLICKED, destroy);
}
Ejemplo n.º 11
0
/** 初始化window部件相关数据 */
static void Window_OnInit( LCUI_Widget *window )
{
	LCUI_Window *wnd;
	LCUI_Graph btn_bg;
	LCUI_TextStyle style;
	LCUI_Border border;
	
	wnd = Widget_NewPrivateData( window, LCUI_Window );

	wnd->theme_color = COLOR_EMERALD;
	wnd->theme_color.a = 128;
	wnd->titlebar = Widget_New(NULL); 
	wnd->client_area = Widget_New(NULL); 
	wnd->btn_close = Widget_New(WIDGET_CLOSE_BUTTON); 
	wnd->icon = Widget_New(NULL);
	wnd->text = Label_New();

	wnd->titlebar->focus = FALSE;
	wnd->icon->focus = FALSE;
	wnd->text->focus = FALSE;
	Widget_SetFocus( wnd->client_area );
	Widget_SetClickable( wnd->icon, FALSE );
	Widget_SetClickable( wnd->text, FALSE );
	Widget_SetClickable( wnd->titlebar, FALSE );
	Widget_SetClickable( wnd->client_area, FALSE );

	Graph_Init( &btn_bg );
	/* 载入按钮背景 */
	LoadCloseButtonIMG( &btn_bg );
	/* close按钮显示在左上角 */
	Widget_SetAlign( wnd->btn_close, ALIGN_TOP_RIGHT, Pos(0,0) );
	Widget_Resize( wnd->btn_close, Size(30, 30) );

	Widget_SetBackgroundImage( wnd->btn_close, &btn_bg );
	Widget_SetBackgroundLayout( wnd->btn_close, LAYOUT_CENTER );
	Widget_SetBackgroundTransparent( wnd->icon, TRUE );
	Widget_SetBackgroundTransparent( wnd->titlebar, TRUE );
	Widget_SetBackgroundTransparent( wnd->client_area, FALSE );
	Widget_SetBackgroundTransparent( window, FALSE );
	Widget_SetBackgroundColor( window, RGB(255,255,255) );
	Widget_SetBackgroundLayout( wnd->icon, LAYOUT_ZOOM );
	Widget_SetDock( wnd->titlebar, DOCK_TYPE_TOP );
	Widget_SetDock( wnd->client_area, DOCK_TYPE_BOTTOM );
	Widget_SetPadding( window, Padding(TOP_PANDDING,1,1,1) );
	Widget_SetPadding( wnd->client_area, Padding(1,1,1,1) );
	Widget_SetSize( wnd->titlebar, "100%", "35px" );
	
	Border_Init( &border );
	border.top_width = 0;
	border.bottom_width = 1;
	border.left_width = 1;
	border.right_width = 1;
	border.bottom_color = RGB(200,200,200);
	border.left_color = RGB(255,255,255);
	border.right_color = RGB(255,255,255);
	Widget_SetBorder( wnd->titlebar, border );

	TextStyle_Init( &style );
	TextStyle_FontSize( &style, 18 );
	Label_SetTextStyle( wnd->text, style );

	/* 放入至容器 */
	Widget_Container_Add( wnd->titlebar, wnd->icon );
	Widget_Container_Add( wnd->titlebar, wnd->text );
	Widget_Container_Add( wnd->titlebar, wnd->btn_close );
	Widget_Container_Add( window, wnd->titlebar );
	Widget_Container_Add( window, wnd->client_area );

	Widget_Resize( window, Size(100, 50) );
	Widget_Resize( wnd->icon, Size(24,24) );
	
	Widget_SetAlign( window, ALIGN_MIDDLE_CENTER, Pos(0,0) );
	Widget_SetAlign( wnd->icon, ALIGN_MIDDLE_LEFT, Pos(6,0) );
	Widget_SetAlign( wnd->text, ALIGN_MIDDLE_LEFT, Pos(6,0) );

	/* 关联拖动事件,让鼠标能够拖动标题栏并使窗口移动 */
	Widget_ConnectEvent( window, EVENT_DRAG, Window_ExecMove );
	/* 
	 * 由于需要在窗口获得/失去焦点时进行相关处理,因此需要将回调函数 与部件
	 * 的FOCUS_IN和FOCUS_OUT事件 进行关联
	 * */
	Widget_ConnectEvent( window, EVENT_FOCUSOUT, Window_OnFocusOut );
	Widget_ConnectEvent( window, EVENT_FOCUSIN, Window_OnFocusIn );
	
	Widget_Show( wnd->btn_close );
	Widget_Show( wnd->icon );
	Widget_Show( wnd->text );
	Widget_Show( wnd->titlebar );
	Widget_Show( wnd->client_area );
}
Ejemplo n.º 12
0
/** 初始化键位设置窗口 */
void GameWindow_InitSetKeyboardWindow(void)
{
	/* 创建所需的GUI部件 */
	window = Widget_New("window");
	box = Widget_New(NULL);
	label = Widget_New("label");
	label_left = Widget_New("label");
	label_right = Widget_New("label");
	label_up = Widget_New("label");
	label_down = Widget_New("label");
	label_jump = Widget_New("label");
	label_defense = Widget_New("label");
	label_a_atk = Widget_New("label");
	label_b_atk = Widget_New("label");
	btn_left = Widget_New("button");
	btn_right = Widget_New("button");
	btn_up = Widget_New("button");
	btn_down = Widget_New("button");
	btn_a_atk = Widget_New("button");
	btn_b_atk = Widget_New("button");
	btn_jump = Widget_New("button");
	btn_defense = Widget_New("button");
	btn_ok = Widget_New("button");
	btn_reset = Widget_New("button");
	
	Widget_Container_Add( box, btn_left );
	Widget_Container_Add( box, btn_right );
	Widget_Container_Add( box, btn_up );
	Widget_Container_Add( box, btn_down );
	Widget_Container_Add( box, btn_jump );
	Widget_Container_Add( box, btn_defense );
	Widget_Container_Add( box, btn_a_atk );
	Widget_Container_Add( box, btn_b_atk );
	Widget_Container_Add( box, label_left );
	Widget_Container_Add( box, label_right );
	Widget_Container_Add( box, label_up );
	Widget_Container_Add( box, label_down );
	Widget_Container_Add( box, label_jump );
	Widget_Container_Add( box, label_defense );
	Widget_Container_Add( box, label_a_atk );
	Widget_Container_Add( box, label_b_atk );
	Window_ClientArea_Add( window, box );
	Window_ClientArea_Add( window, label );
	Window_ClientArea_Add( window, btn_ok );
	Window_ClientArea_Add( window, btn_reset );
	
	Widget_SetAutoSize( btn_left, FALSE, 0 );
	Widget_SetAutoSize( btn_right, FALSE, 0 );
	Widget_SetAutoSize( btn_up, FALSE, 0 );
	Widget_SetAutoSize( btn_down, FALSE, 0 );
	Widget_SetAutoSize( btn_jump, FALSE, 0 );
	Widget_SetAutoSize( btn_a_atk, FALSE, 0 );
	Widget_SetAutoSize( btn_b_atk, FALSE, 0 );
	Widget_SetAutoSize( btn_defense, FALSE, 0 );
	Widget_SetAutoSize( btn_ok, FALSE, 0 );

	Widget_Resize( btn_left, KEYBTN_SIZE );
	Widget_Resize( btn_right, KEYBTN_SIZE );
	Widget_Resize( btn_up, KEYBTN_SIZE );
	Widget_Resize( btn_down, KEYBTN_SIZE );
	Widget_Resize( btn_jump, KEYBTN_SIZE );
	Widget_Resize( btn_a_atk, KEYBTN_SIZE );
	Widget_Resize( btn_b_atk, KEYBTN_SIZE );
	Widget_Resize( btn_defense, KEYBTN_SIZE );
	Widget_Resize( btn_ok, BTN_SIZE );
	Widget_Resize( btn_reset, BTN_SIZE );
	
	Widget_Move( btn_left, Pos(0,50+22) );
	Widget_Move( btn_right, Pos(100,50+22) );
	Widget_Move( btn_up, Pos(50,0+22) );
	Widget_Move( btn_down, Pos(50,50+22) );
	Widget_Move( btn_jump, Pos(200,50+22) );
	Widget_Move( btn_a_atk, Pos(200,0+22) );
	Widget_Move( btn_b_atk, Pos(250,0+22) );
	Widget_Move( btn_defense, Pos(250,50+22) );
	
	Widget_Move( label_left, Pos(10,125) );
	Widget_Move( label_right, Pos(110,125) );
	Widget_Move( label_up, Pos(60,0) );
	Widget_Move( label_down, Pos(60,125) );
	Widget_Move( label_a_atk, Pos(210,0) );
	Widget_Move( label_b_atk, Pos(260,0) );
	Widget_Move( label_jump, Pos(210,125) );
	Widget_Move( label_defense, Pos(260,125) );

	UpdateKeyBtn();
	/* 设置各种文本 */
	Label_TextW( label_left, TEXT_LEFT );
	Label_TextW( label_right, TEXT_RIGHT );
	Label_TextW( label_up, TEXT_UP );
	Label_TextW( label_down, TEXT_DOWN );
	Label_TextW( label_jump, TEXT_JUMP );
	Label_TextW( label_defense, TEXT_DEFENSE );
	Label_TextW( label_a_atk, TEXT_A_ATK );
	Label_TextW( label_b_atk, TEXT_B_ATK );
	/* 设置窗口 */
	Widget_SetStyleID( window, WINDOW_STYLE_LINE );
	Widget_Resize( window, WINDOW_SIZE );
	Widget_SetPadding( Window_GetClientArea(window), Padding(10,10,10,10) );

	Label_TextW( label, TEXT_SET_KEYBOARD );
	Widget_SetBackgroundColor( label, RGB(255,255,255) );
	Widget_SetBackgroundTransparent( label, FALSE );

	Button_TextW( btn_ok, TEXT_OK );
	Button_TextW( btn_reset, TEXT_RESET );

	Widget_SetSize( box, "100%", "165px" );
	Widget_SetBorder( box, Border(1,BORDER_STYLE_SOLID,RGB(200,200,200)) );
	Widget_SetPadding( box, Padding(10,10,10,10) );

	Widget_SetAlign( box, ALIGN_TOP_CENTER, Pos(0,12) );
	Widget_SetAlign( label, ALIGN_TOP_CENTER, Pos(0,0) );
	Widget_SetAlign( btn_ok, ALIGN_BOTTOM_CENTER, Pos(-50,-5) );
	Widget_SetAlign( btn_reset, ALIGN_BOTTOM_CENTER, Pos(50,-5) );
	/* 为键位按钮连接事件 */
	Widget_ConnectEvent( btn_ok, EVENT_CLICKED, btn_ok_on_clicked );
	Widget_ConnectEvent( btn_reset, EVENT_CLICKED, btn_reset_on_clicked );
	Widget_ConnectEvent( btn_left, EVENT_CLICKED, btn_key_on_clicked );
	Widget_ConnectEvent( btn_right, EVENT_CLICKED, btn_key_on_clicked );
	Widget_ConnectEvent( btn_up, EVENT_CLICKED, btn_key_on_clicked );
	Widget_ConnectEvent( btn_down, EVENT_CLICKED, btn_key_on_clicked );
	Widget_ConnectEvent( btn_b_atk, EVENT_CLICKED, btn_key_on_clicked );
	Widget_ConnectEvent( btn_a_atk, EVENT_CLICKED, btn_key_on_clicked );
	Widget_ConnectEvent( btn_jump, EVENT_CLICKED, btn_key_on_clicked );
	Widget_ConnectEvent( btn_defense, EVENT_CLICKED, btn_key_on_clicked );
	
	Widget_Show( btn_left );
	Widget_Show( btn_right );
	Widget_Show( btn_up );
	Widget_Show( btn_down );
	Widget_Show( btn_jump );
	Widget_Show( btn_a_atk );
	Widget_Show( btn_b_atk );
	Widget_Show( btn_defense );
	Widget_Show( label_left );
	Widget_Show( label_right );
	Widget_Show( label_up );
	Widget_Show( label_down );
	Widget_Show( label_jump );
	Widget_Show( label_a_atk );
	Widget_Show( label_b_atk );
	Widget_Show( label_defense );
	Widget_Show( btn_ok );
	Widget_Show( btn_reset );
	Widget_Show( box );
	Widget_Show(label );
}