Example #1
0
File: mora.c Project: yydaor/LCUI
static void 
run_game(int select)
/* 功能:运行游戏 */
{
	int cpu_select;
	cpu_select = rand() % 3;  /* 产生3以内的随机数 */ 
	/* 根据随机数的取值,让PictureBox部件显示不同的图像 */
	if(cpu_select == 0) { /* 石头 */
		PictureBox_SetImage(cpu_pic_box, &stone); 
	}
	else if(cpu_select == 1) { /* 剪刀 */
		PictureBox_SetImage(cpu_pic_box, &knife); 
	} else {/* 布 */
		PictureBox_SetImage(cpu_pic_box, &cloth); 
	}
	if(cpu_select == select) {/* 如果出一样的,平局次数+1 */
		standoff += 1; 
	}
	else if((cpu_select == 0 && select == 1) 
		|| (cpu_select == 1 && select == 2) 
		|| (cpu_select == 2 && select == 0)) {
		/* 如果是程序赢了, 输的次数+1 */
		lose += 1; 
	} else { /* 否则只有玩家赢了,赢的次数+1 */
		win += 1; 
	}
	update_text();/* 更新文本内容 */
}
Example #2
0
File: mora.c Project: yydaor/LCUI
static void 
clear_game()
/* 功能:清理游戏,恢复PictureBox部件显示的图像 */
{
	PictureBox_SetImage( me_pic_box, &think ); 
	PictureBox_SetImage( cpu_pic_box, &think );
	Widget_Disable(btn_next);
}
Example #3
0
LCUI_API void
Window_SetTitleIcon(LCUI_Widget *window, LCUI_Graph *icon)
/* 功能:自定义指定窗口的标题栏图标 */
{
	LCUI_Graph *image;
	LCUI_Widget *title_widget;
	LCUI_TitleBar *title_data;
	
	if( window == NULL ) {
		return;
	}
	title_widget = Window_GetTitleBar(window);
	title_data = (LCUI_TitleBar *)Widget_GetPrivData(title_widget);
	
	image = PictureBox_GetImage(title_data->icon_box);
	Graph_Free(image);/* 释放PictureBox部件内的图像占用的资源 */
	if(icon == NULL) {
		return;
	}
	/* 设置新图标 */
	PictureBox_SetImage(title_data->icon_box, icon);
	Widget_SetAlign(title_data->icon_box, ALIGN_MIDDLE_LEFT, Pos(3,0));
	Widget_SetAlign(title_data->label, ALIGN_MIDDLE_LEFT, Pos(23,0));
 
}
Example #4
0
File: mora.c Project: yydaor/LCUI
/* 玩家选择布 */
static void 
select_cloth( LCUI_Widget *widget, LCUI_WidgetEvent *unused )
{
	if(!Graph_IsValid(&left_cloth)) {
		Graph_HorizFlip( &cloth, &left_cloth );
	}
	PictureBox_SetImage( me_pic_box, &left_cloth ); 
	Widget_Disable( btn_j );
	Widget_Disable( btn_s );
	Widget_Disable( btn_b );
	Widget_Enable( btn_next );
	run_game(2);
}
Example #5
0
/* 设定图片文件中的图像为PictureBox部件显示的图像 */
LCUI_API int
PictureBox_SetImageFile( LCUI_Widget *widget, char *image_file )
{
	int ret;
	graph_data data;
	LCUI_PictureBox *pic_box;
	LCUI_Graph *graph;
	
	pic_box = Widget_GetPrivData(widget);
	if( !graph_mem_init ) {
		Queue_Init( &picbox_graph_mem, 
			sizeof(graph_data), destroy_graph_data);
		graph_mem_init = TRUE;
	}
	/* 如果在记录中没找到该部件,那么就分配内存,否则,直接使用那块内存 */
	ret = find_widget_data(widget);
	if(ret == -1) {
		data.image = (LCUI_Graph*) calloc(1, sizeof(LCUI_Graph));
		data.widget = widget;
		Queue_Add(&picbox_graph_mem, &data); 
	} else {
		data = *(graph_data*)Queue_Get(&picbox_graph_mem, ret); 
	}
	graph = data.image;
	
	pic_box->image_state = IMAGE_STATE_LOADING; /* 图片状态为正在载入 */
	PictureBox_SetImage(widget, NULL);
	ret = Graph_LoadImage( image_file, graph );/* 载入图片文件 */
	if( ret == 0 ) {
		/* 载入成功 */
		pic_box->image_state = IMAGE_STATE_SUCCESS; 
		PictureBox_SetImage(widget, graph);
	} else {
		/* 载入失败 */
		pic_box->image_state = IMAGE_STATE_FAIL;
		PictureBox_SetImage(widget, NULL);
	}
	return ret;
}
Example #6
0
File: mora.c Project: yydaor/LCUI
/* 玩家选择石头 */
static void
select_stone( LCUI_Widget *widget, LCUI_WidgetEvent *unused )
{
	/* 如果没有存储已水平翻转的图像,就进行水平翻转 */
	if(!Graph_IsValid(&left_stone)) {
		Graph_HorizFlip(&stone, &left_stone);
	}
	/* 设定显示的图像为石头 */
	PictureBox_SetImage(me_pic_box, &left_stone);
	Widget_Disable(btn_j);
	Widget_Disable(btn_s);
	Widget_Disable(btn_b);
	Widget_Enable(btn_next);
	run_game(0);/* 进入游戏 */
}
Example #7
0
File: clock.c Project: yydaor/LCUI
void update_clock(void *arg)
{
	time_t rawtime;
	struct tm * timeinfo;
	LCUI_Graph h_temp, m_temp, clock_bg, hour_pointer, minute_pointer;
	LCUI_Widget *widget;
	LCUI_Widget *bg, *hour, *minute; 
	int h_angle, m_angle;
	
	widget = (LCUI_Widget *)arg;
	/* 初始化图形数据结构 */
	Graph_Init(&clock_bg);
	Graph_Init(&minute_pointer);
	Graph_Init(&hour_pointer);
	Graph_Init(&h_temp);
	Graph_Init(&m_temp);
	/* 创建几个部件 */
	bg = Widget_New("picture_box");
	hour = Widget_New("picture_box");
	minute = Widget_New("picture_box");
	/* PictureBox部件居中显示图片 */
	PictureBox_SetSizeMode(bg, SIZE_MODE_CENTER);
	PictureBox_SetSizeMode(hour, SIZE_MODE_CENTER);
	PictureBox_SetSizeMode(minute, SIZE_MODE_CENTER);
	/* 载入图片,保存图形数据 */
	Load_Image("new_daytime_background.png", &clock_bg);
	Load_Image("new_daytime_hour.png", &hour_pointer);
	Load_Image("new_daytime_minute.png", &minute_pointer);
	/* 设定PictureBox部件显示的图形 */
	PictureBox_SetImage(bg, &clock_bg);
	PictureBox_SetImage(hour, &hour_pointer);
	PictureBox_SetImage(minute, &minute_pointer);
	/* 将这些部件添加至相应容器中 */
	Widget_Container_Add(bg, hour);
	Widget_Container_Add(bg, minute);
	/* 将部件添加至窗口客户区中 */
	Window_ClientArea_Add(widget, bg);
	/* 改变部件尺寸,使用固定的尺寸 */
	Widget_Resize(bg, Size(280, 280));
	Widget_Resize(hour, Size(120, 120));
	Widget_Resize(minute, Size(120, 120));
	/* 改变部件的布局方式,都是居中显示 */
	Widget_SetAlign(bg, ALIGN_MIDDLE_CENTER, Pos(0, 0));
	Widget_SetAlign(hour, ALIGN_MIDDLE_CENTER, Pos(0, 0));
	Widget_SetAlign(minute, ALIGN_MIDDLE_CENTER, Pos(0, 0));
	/* 显示 */
	Widget_Show(hour);
	Widget_Show(minute);
	Widget_Show(bg);
	
	while(1) {
	time ( &rawtime );
	timeinfo = localtime ( &rawtime ); /* 获取系统当前时间 */
	/* 计算时针分针的角度 */
	h_angle = 360*timeinfo->tm_hour / 12.0;
	m_angle = 360*timeinfo->tm_min / 60.0;
	h_angle += m_angle / 60;
	/* 根据这个角度来旋转图形 */
	Graph_Rotate(&hour_pointer, h_angle, &h_temp);
	Graph_Rotate(&minute_pointer, m_angle, &m_temp);
	/* 更改PictureBox部件显示的图形 */
	PictureBox_SetImage(hour, &h_temp);
	PictureBox_SetImage(minute, &m_temp);
	LCUI_Sleep(1);/* 暂停1秒 */
	}
	
	LCUIThread_Exit(NULL);
}
Example #8
0
/* 更新复选框的图形数据 */
static void 
CheckBox_ExecDraw(LCUI_Widget *widget)
{
	LCUI_Graph *p;
	LCUI_CheckBox *check_box;
	
	check_box = Widget_GetPrivData(widget); 
								
	if(_LCUIString_Cmp(&widget->style_name, "custom") == 0) {
		/* 如果为自定义风格,那就使用用户指定的图形,具体可参考按钮部件的处理方法 */ 
		if( !widget->enabled ) {
			widget->state = WIDGET_STATE_DISABLE;
		}
		switch(widget->state){
		case WIDGET_STATE_NORMAL:
			if( check_box->on ) {
				p = &check_box->img_on_normal;
			} else {
				p = &check_box->img_off_normal;
			}
			PictureBox_SetImage(check_box->imgbox, p);
			break;
		case WIDGET_STATE_OVERLAY :
			if( check_box->on ) {
				p = &check_box->img_on_over;
			} else {
				p = &check_box->img_off_over;
			}
			PictureBox_SetImage(check_box->imgbox, p);
			break;
		case WIDGET_STATE_ACTIVE : 
			if( check_box->on ) {
				p = &check_box->img_on_down;
			} else {
				p = &check_box->img_off_down;
			}
			PictureBox_SetImage(check_box->imgbox, p);
			break;
		case WIDGET_STATE_DISABLE :
			if( check_box->on ) {
				p = &check_box->img_on_disable;
			} else {
				p = &check_box->img_off_disable;
			}
			PictureBox_SetImage(check_box->imgbox, p); 
			break;
			default :
			break;
		} 
	} else {/* 如果按钮的风格为缺省 */
		_LCUIString_Copy(&widget->style_name, "default");
		if( !widget->enabled ) {
			widget->state = WIDGET_STATE_DISABLE;
		}
		/* 先释放PictureBox部件中保存的图形数据的指针 */
		p = PictureBox_GetImage(check_box->imgbox);
		Graph_Free(p);
		
		/* 由于本函数在退出后,使用局部变量保存的图形数据会无效,因此,申请内存空间来储存 */
		p = (LCUI_Graph*)calloc(1,sizeof(LCUI_Graph));
		
		switch(widget->state) { 
		case WIDGET_STATE_NORMAL:
			if( check_box->on ) {
				Load_Graph_Default_CheckBox_On_Normal(p);
			} else {
				Load_Graph_Default_CheckBox_Off_Normal(p);
			}
			PictureBox_SetImage(check_box->imgbox, p);
			break;
		case WIDGET_STATE_OVERLAY :
			if( check_box->on ) {
				Load_Graph_Default_CheckBox_On_Selected(p);
			} else {
				Load_Graph_Default_CheckBox_Off_Selected(p);
			}
			PictureBox_SetImage(check_box->imgbox, p);
			break;
		case WIDGET_STATE_ACTIVE : 
			if( check_box->on ) {
				Load_Graph_Default_CheckBox_On_Selected(p);
			} else {
				Load_Graph_Default_CheckBox_Off_Selected(p);
			}
			PictureBox_SetImage(check_box->imgbox, p);
			break;
		case WIDGET_STATE_DISABLE :
			if( check_box->on ) {
				Load_Graph_Default_CheckBox_On_Disabled(p);
			} else {
				Load_Graph_Default_CheckBox_Off_Disabled(p);
			}
			PictureBox_SetImage(check_box->imgbox, p);
			break;
			default : break;
		}
	}
}
Example #9
0
/* 更新单选框的图形数据 */
static void RadioButton_ExecUpdate( LCUI_Widget widget )
{
	int img_id;
	LCUI_Graph *img_ptr;
	LCUI_RadioButton *radio_button;
	
	radio_button = (LCUI_RadioButton*)Widget_GetPrivData(widget);
	/* 如果为自定义风格,那就使用用户指定的图形 */ 	
	if( _LCUIString_Cmp(&widget->style_name, "custom") == 0 ) {
		if(widget->enabled == FALSE)  {
			widget->state = WIDGET_STATE_DISABLE;
		}
		switch(widget->state) {
		case WIDGET_STATE_NORMAL:
			if(radio_button->on) {
				img_ptr = &radio_button->img_on_normal;
			} else {
				img_ptr = &radio_button->img_off_normal;
			}
			break;
		case WIDGET_STATE_OVERLAY :
			if(radio_button->on) {
				img_ptr = &radio_button->img_on_over;
			} else {
				img_ptr = &radio_button->img_off_over;
			}
			break;
		case WIDGET_STATE_ACTIVE : 
			if(radio_button->on) {
				img_ptr = &radio_button->img_on_down;
			} else {
				img_ptr = &radio_button->img_off_down;
			}
			break;
		case WIDGET_STATE_DISABLE :
			if(radio_button->on) {
				img_ptr = &radio_button->img_on_disable;
			} else {
				img_ptr = &radio_button->img_off_disable;
			}
			break;
		default:return;
		} 
		PictureBox_SetImage(radio_button->imgbox, img_ptr);
	}

	_LCUIString_Copy( &widget->style_name, "default" );
	if( !widget->enabled ) {
		widget->state = WIDGET_STATE_DISABLE;
	}
	switch(widget->state) {
	case WIDGET_STATE_NORMAL:
		if(radio_button->on) {
			img_id = IMG_ON_NORMAL;
		} else {
			img_id = IMG_OFF_NORMAL;
		}
		break;
	case WIDGET_STATE_OVERLAY :
		if(radio_button->on) {
			img_id = IMG_ON_SELECTED;
		} else {
			img_id = IMG_OFF_SELECTED;
		}
		break;
	case WIDGET_STATE_ACTIVE :
	case WIDGET_STATE_DISABLE :
	default: return;
	}
	img_ptr = PictureBox_GetImage( radio_button->imgbox );
	Graph_Free( img_ptr );
	img_ptr = (LCUI_Graph*)calloc( 1, sizeof(LCUI_Graph) );
	RadioButton_LoadDefaultGraph( img_ptr, img_id );
	PictureBox_SetImage( radio_button->imgbox, img_ptr );
}