int Set_PictureBox_Image_From_File(LCUI_Widget *widget, char *image_file) /* 功能:添加一个图片文件,并载入至图片盒子 */ { int value; graph_data data; LCUI_PictureBox *pic_box = (LCUI_PictureBox*) Get_Widget_PrivData(widget); LCUI_Graph *graph; if(init == IS_FALSE) { Queue_Init( &picbox_graph_mem, sizeof(graph_data), destroy_graph_data); init = IS_TRUE; } /* 如果在记录中没找到该部件,那么就分配内存,否则,直接使用那块内存 */ value = find_widget_data(widget); if(value == -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, value); } graph = data.image; pic_box->image_status = IMAGE_STATUS_LOADING; /* 图片状态为正在载入 */ Set_PictureBox_Image_From_Graph(widget, NULL); value = Load_Image(image_file, graph);/* 载入图片文件 */ if(value != 0) { /* 载入失败 */ pic_box->image_status = IMAGE_STATUS_FAIL; Set_PictureBox_Image_From_Graph(widget, NULL); } else { /* 载入成功 */ pic_box->image_status = IMAGE_STATUS_SUCCESS; Set_PictureBox_Image_From_Graph(widget, graph); } return value; }
static void Exec_Update_ProgressBar(LCUI_Widget *widget) /* 功能:更新进度条的图形 */ { LCUI_ProgressBar *pb = (LCUI_ProgressBar*)Get_Widget_PrivData(widget); if(Strcmp(&widget->style, "dynamic") == 0) { /* 绘制空槽 */ Draw_Empty_Slot(&widget->graph, widget->size.w, widget->size.h); Set_Widget_Border_Style(widget, BORDER_STYLE_NONE); /* 载入两个图形 */ if(!Graph_Valid(&pb->fore_graph)) Load_Graph_ProgressBar_Fore(&pb->fore_graph); if(!Graph_Valid(&pb->flash_image)) Load_Graph_ProgressBar_Img(&pb->flash_image); Resize_Widget(pb->img_pic_box, Get_Graph_Size(&pb->flash_image)); /* 让图片盒子显示这个图形 */ Set_PictureBox_Image_From_Graph(pb->img_pic_box, &pb->flash_image); } else { Strcpy(&widget->style, "classic"); if(!Graph_Valid(&pb->fore_graph)) Graph_Create(&pb->fore_graph, 10, widget->size.h); Graph_Fill_Color(&pb->fore_graph, RGB(80,80,200)); Graph_Fill_Alpha(&pb->fore_graph, 255); } /* 让图片盒子显示这个图形 */ Set_PictureBox_Image_From_Graph(pb->fore_pic_box, &pb->fore_graph); int width, height; /* 计算进度条的长度 */ width = (widget->size.w - widget->border.left - widget->border.right) * pb->value / pb->max_value + 0.5; height = widget->size.h - widget->border.top - widget->border.bottom; Move_Widget(pb->fore_pic_box, Pos(widget->border.left, widget->border.top)); /* 改变进度条的尺寸 */ Resize_Widget(pb->fore_pic_box, Size(width, height)); }
void *change_graph(void *arg) /* 功能:改变显示的图形 */ { LCUI_Widget *widget = (LCUI_Widget *)arg; int i; LCUI_Graph frame, temp; Graph_Init(&frame);/* 初始化 */ Load_Image("ring.png", &frame);/* 载入之 */ /* 居中显示图形 */ Set_Widget_Align(widget, ALIGN_MIDDLE_CENTER, Pos(0, -20)); Set_PictureBox_Size_Mode(widget, SIZE_MODE_CENTER); Show_Widget(widget); while(1) { Set_PictureBox_Image_From_Graph(widget, &frame); for(i=10; i<=360; i+=10) { Rotate_Graph(&frame, i, &temp); Set_PictureBox_Image_From_Graph(widget, &temp); usleep(20000); } } LCUI_Thread_Exit(NULL); }
void Set_Window_Title_Icon(LCUI_Widget *window, LCUI_Graph *icon) /* 功能:自定义指定窗口的标题栏图标 */ { LCUI_Graph *image; LCUI_Widget *title_widget; LCUI_TitleBar *title_data; title_widget = Get_Window_TitleBar(window); title_data = (LCUI_TitleBar *)Get_Widget_PrivData(title_widget); image = Get_PictureBox_Graph(title_data->icon_box); Graph_Free(image);/* 释放PictureBox部件内的图像占用的资源 */ if(icon == NULL) { return; } /* 设置新图标 */ Set_PictureBox_Image_From_Graph(title_data->icon_box, icon); Set_Widget_Align(title_data->icon_box, ALIGN_MIDDLE_LEFT, Pos(3,0)); Set_Widget_Align(title_data->label, ALIGN_MIDDLE_LEFT, Pos(23,0)); }