コード例 #1
0
ファイル: application.c プロジェクト: 201409366/RTGUI
static void app_lcd(void *parameter)
{
    /* create application */
	struct rtgui_app *app;
    struct rtgui_rect rect1 = {0, 0, 240, 320};
    struct rtgui_button* btn;
    struct rtgui_label *lb;

	app = rtgui_app_create("lcd_app");

    if (!app)
    {
        rt_kprintf("Create application \"lcd_app\" failed!\n");
        return;
    }

    /* create main window */
    win_main = rtgui_win_create(RT_NULL, "main",
                    &rect1,
                    RTGUI_WIN_STYLE_NO_BORDER | RTGUI_WIN_STYLE_NO_TITLE);
    if (win_main == RT_NULL)
    {
        rt_kprintf("Create window \"main\" failed!\n");
        rtgui_app_destroy(app);
        return;
    }
    RTGUI_WIDGET_BACKGROUND(RTGUI_WIDGET(win_main)) = green;

    rect1.x1 = rect1.y1 = 50;
    rect1.x2 -= 50;
    rect1.y2 -= 50;
    lb = rtgui_label_create("I am a transparent label!!!!!!!!!");
    rtgui_widget_set_rect(RTGUI_WIDGET(lb), &rect1);
    RTGUI_WIDGET_FLAG(RTGUI_WIDGET(lb)) |= RTGUI_WIDGET_FLAG_TRANSPARENT;

    rect1.x1 += 20;
    rect1.y1 += 20;
	notebook = rtgui_notebook_create(&rect1, 0);
    /* create lable in main container */
    btn = rtgui_button_create("Here I am.");
    rtgui_notebook_add(notebook, "btn A", RTGUI_WIDGET(btn));
    rtgui_button_set_onbutton(btn, remove_myself);
    btn = rtgui_button_create("There I am.");
    rtgui_notebook_add(notebook, "btn B", RTGUI_WIDGET(btn));

    rtgui_container_add_child(RTGUI_CONTAINER(win_main), RTGUI_WIDGET(lb));
	rtgui_container_add_child(RTGUI_CONTAINER(win_main), RTGUI_WIDGET(notebook));

    rtgui_win_show(win_main, RT_FALSE);

    rtgui_app_run(app);
    rtgui_app_destroy(app);
}
コード例 #2
0
static void rtgui_list_view_calc(struct rtgui_list_view* view)
{
	rtgui_rect_t rect;
	rt_uint32_t image_width, image_height;
	rt_ubase_t text_width, text_height;
	rt_ubase_t item_width, item_height;

	if (view->items_count == 0) return;

	/* get image width and height */
	if (view->items[0].image != RT_NULL)
	{
		image_width  = view->items[0].image->w;
		image_height = view->items[0].image->h;
	}
	else
	{
		image_width  = 0;
		image_height = 0;
	}

	rtgui_font_get_metrics(RTGUI_WIDGET_FONT(RTGUI_WIDGET(view)), "HHHHHH", &rect);

	text_height = rtgui_rect_height(rect);
	text_width = rtgui_rect_width(rect);

	rtgui_widget_get_rect(RTGUI_WIDGET(view), &rect);

	item_width = (image_width + LIST_MARGIN);
	if (item_width < (text_width + LIST_MARGIN)) item_width = text_width + LIST_MARGIN;
	item_height = image_height + 8 + text_height + LIST_MARGIN; 
	if (item_width > item_height) item_height = item_width;
	else item_width = item_height;
	
	view->row_items = (rtgui_rect_height(rect) - 2 * LIST_MARGIN) / item_height;
	view->col_items = (rtgui_rect_width(rect) - 2 * LIST_MARGIN) / item_width;
	view->page_items = view->row_items * view->col_items;
}
コード例 #3
0
ファイル: notebook.c プロジェクト: fengye0316/RTT_GPS_STUSB
void rtgui_notebook_add_image(struct rtgui_notebook* notebook, const char* label, struct rtgui_widget* child, 
	struct rtgui_image *pressed_image, struct rtgui_image *unpressed_image)
{
	rtgui_rect_t rect;
	RT_ASSERT(notebook != RT_NULL);

	notebook->count += 1;
	notebook->childs = (struct rtgui_notebook_tab*)
		rtgui_realloc(notebook->childs,
		sizeof(struct rtgui_notebook_tab) * notebook->count);

	notebook->childs[notebook->count - 1].title = rt_strdup(label);
	notebook->childs[notebook->count - 1].widget = child;
	notebook->childs[notebook->count - 1].pressed_image = pressed_image;
	notebook->childs[notebook->count - 1].unpressed_image = unpressed_image;

	/* set parent */
	rtgui_widget_set_parent(child, RTGUI_WIDGET(notebook));

	_rtgui_notebook_get_page_rect(notebook, &rect);
	rtgui_widget_rect_to_device(RTGUI_WIDGET(notebook), &rect);
	rtgui_widget_set_rect(child, &rect);

	if (notebook->count - 1 != notebook->current)
		rtgui_widget_hide(child);

	if (RTGUI_WIDGET(notebook)->toplevel != RT_NULL &&
		RTGUI_IS_WIN(RTGUI_WIDGET(notebook)->toplevel))
	{
		struct rtgui_event_update_toplvl eup;
		RTGUI_EVENT_UPDATE_TOPLVL_INIT(&eup);
		eup.toplvl = RTGUI_WIDGET(notebook)->toplevel;
		if (RTGUI_OBJECT(child)->event_handler)
			RTGUI_OBJECT(child)->event_handler(RTGUI_OBJECT(child), (struct rtgui_event*)&eup);
	}

	return;
}
コード例 #4
0
/* 创建用于演示label控件的视图 */
rtgui_container_t *demo_view_listctrl(void)
{
    rtgui_rect_t rect;
    rtgui_container_t *container;
    rtgui_label_t *label;
    rtgui_listctrl_t *box;

    /* 先创建一个演示用的视图 */
    container = demo_view("List Control Demo");

    if (item_icon == RT_NULL)
        item_icon = rtgui_image_create_from_mem("xpm",
                                                (const rt_uint8_t *)image_xpm, sizeof(image_xpm), RT_TRUE);
    items[1].image = item_icon;

    /* 获得视图的位置信息 */
    demo_view_get_rect(container, &rect);
    rect.x1 += 5;
    rect.x2 -= 5;
    rect.y1 += 5;
    rect.y2 = rect.y1 + 20;
    /* 创建一个label控件 */
    label = rtgui_label_create("List Control: ");
    /* 设置label的位置 */
    rtgui_widget_set_rect(RTGUI_WIDGET(label), &rect);
    /* container是一个container控件,调用add_child方法添加这个label控件 */
    rtgui_container_add_child(container, RTGUI_WIDGET(label));

    rect.y1 = rect.y2 + 3;
    rect.y2 = 250;
    box = rtgui_listctrl_create(items, sizeof(items) / sizeof(items[0]), &rect,
                                _rtgui_listctrl_item_draw);
    rtgui_listctrl_set_onitem(box, on_items);
    /* container是一个container控件,调用add_child方法添加这个listctrl控件 */
    rtgui_container_add_child(container, RTGUI_WIDGET(box));

    return container;
}
コード例 #5
0
ファイル: textbox.c プロジェクト: bbw2008good/RTGUI
static void rtgui_textbox_onmouse(struct rtgui_textbox* box, struct rtgui_event_mouse* event)
{
	rt_size_t length;

	RT_ASSERT(box != RT_NULL);
	RT_ASSERT(event != RT_NULL);

	length = rt_strlen((const char*)box->text);

	if (event->button & RTGUI_MOUSE_BUTTON_LEFT &&
		event->button & RTGUI_MOUSE_BUTTON_DOWN)
	{
		rt_int32_t x;

		/* set caret position */
		x = event->x - RTGUI_WIDGET(box)->extent.x1;
		if (x < 0)
		{
			box->position = 0;
		}
		else if (x > length * box->font_width)
		{
			box->position = length;
		}
		else
		{
			box->position = x / box->font_width;
		}

		/* set caret to show */
		box->flag |= RTGUI_TEXTBOX_CARET_SHOW;

		/* set widget focus */
		rtgui_widget_focus(RTGUI_WIDGET(box));
		/* re-draw text box */
		rtgui_theme_draw_textbox(box);
	}
}
コード例 #6
0
ファイル: demo_view_window.c プロジェクト: EvanZheng/RTGUI
static void create_normal_win(void)
{
    rtgui_rect_t rect = {30, 40, 150, 80};

    normal_window = rtgui_win_create(RT_NULL, "普通窗口",
                                     &rect, RTGUI_WIN_STYLE_DEFAULT);

    rect.x1 += 20;
    rect.x2 -= 5;
    rect.y1 += 5;
    rect.y2 = rect.y1 + 20;

    /* 添加一个文本标签 */
    rt_sprintf(normal_window_label_text,
               "第 %d 次显示", normal_window_show_count);
    normal_window_label = rtgui_label_create(normal_window_label_text);
    rtgui_widget_set_rect(RTGUI_WIDGET(normal_window_label), &rect);
    rtgui_container_add_child(RTGUI_CONTAINER(normal_window),
                              RTGUI_WIDGET(normal_window_label));

    rtgui_win_set_onclose(normal_window,
                          normal_window_onclose);
}
コード例 #7
0
ファイル: filelist.c プロジェクト: ADTL/realtouch-stm32f4
void main(void)
{
	struct rtgui_app* application;
	struct rtgui_win* win;	

	application = rtgui_app_create(rt_thread_self(), "filelist");
	if (application != RT_NULL)
	{			
		struct rtgui_rect rect;
	    rtgui_filelist_view_t *view;

		win = rtgui_mainwin_create(RT_NULL, "filelist", 
			RTGUI_WIN_STYLE_MAINWIN | RTGUI_WIN_STYLE_DESTROY_ON_CLOSE);
        
		rtgui_widget_get_extent(RTGUI_WIDGET(win), &rect);

	    view = rtgui_filelist_view_create("/", "*.*", &rect);
        rtgui_container_add_child(RTGUI_CONTAINER(win), RTGUI_WIDGET(view));

		rtgui_win_show(win, RT_TRUE);
		rtgui_app_destroy(application);
	}
}
コード例 #8
0
ファイル: progressbar.c プロジェクト: firetechmlf/RTGUI
static void _rtgui_progressbar_constructor(rtgui_progressbar_t *bar)
{
    rtgui_rect_t rect = {0, 0, DEFAULT_WIDTH, DEFAULT_HEIGHT};

    rtgui_object_set_event_handler(RTGUI_OBJECT(bar), rtgui_progressbar_event_handler);
    rtgui_widget_set_rect(RTGUI_WIDGET(bar), &rect);

    bar->orient = RTGUI_HORIZONTAL;
    bar->range = RTGUI_PROGRESSBAR_DEFAULT_RANGE;
    bar->position = 0;

    /* set gc */
    RTGUI_WIDGET_TEXTALIGN(bar) = RTGUI_ALIGN_CENTER_HORIZONTAL | RTGUI_ALIGN_CENTER_VERTICAL;
}
コード例 #9
0
rt_bool_t rtgui_combobox_pdwin_onitem(struct rtgui_object* object, struct rtgui_event* event)
{
    struct rtgui_widget *widget;
    rtgui_win_t* pd_win;
    rtgui_combobox_t* combo;
    rtgui_listbox_t* list;

    RT_ASSERT(object != RT_NULL);

    widget = RTGUI_WIDGET(object);
    list = RTGUI_LISTBOX(widget);
    pd_win = RTGUI_WIN(rtgui_widget_get_toplevel(widget));
    combo = RTGUI_COMBOBOX(pd_win->user_data);
    combo->current_item = list->current_item;

    if (combo->on_selected != RT_NULL)
        combo->on_selected(RTGUI_OBJECT(combo), RT_NULL);

    rtgui_win_hiden(pd_win);
    rtgui_widget_update(RTGUI_WIDGET(combo));

    return RT_FALSE;
}
コード例 #10
0
ファイル: list_view.c プロジェクト: visitor83/fighting_stm32
static void rtgui_list_view_onlistdraw(struct rtgui_list_view* view, struct rtgui_dc *dc)
{
	rt_ubase_t index, page_index;
	rtgui_rect_t rect, item_rect, image_rect;
	const struct rtgui_list_item* item;

	rtgui_widget_get_rect(RTGUI_WIDGET(view), &rect);

	/* get item base rect */
	item_rect = rect;
	item_rect.y1 += 2;
	item_rect.y2 = item_rect.y1 + (2 + rtgui_theme_get_selected_height());

	/* get current page */
	page_index = (view->current_item / view->page_items) * view->page_items;
	for (index = 0; index < view->page_items; index ++)
	{
		if (page_index + index >= view->items_count) break;

		item = &(view->items[page_index + index]);

		if (page_index + index == view->current_item)
		{
			rtgui_theme_draw_selected(dc, &item_rect);
		}
		item_rect.x1 += LIST_MARGIN;

		if (item->image != RT_NULL)
		{
			/* blit on center */
			image_rect.x1 = 0; image_rect.y1 = 0;
			image_rect.x2 = item->image->w;
			image_rect.y2 = item->image->h;

			rtgui_rect_moveto_align(&item_rect, &image_rect, RTGUI_ALIGN_CENTER_VERTICAL);
			rtgui_image_blit(item->image, dc, &image_rect);
			item_rect.x1 += item->image->w + 2;
		}
		/* draw text */
		rtgui_dc_draw_text(dc, item->name, &item_rect);

		if (item->image != RT_NULL)
			item_rect.x1 -= (item->image->w + 2);
		item_rect.x1 -= LIST_MARGIN;

		/* move to next item position */
		item_rect.y1 += (rtgui_theme_get_selected_height() + 2);
		item_rect.y2 += (rtgui_theme_get_selected_height() + 2);
	}
}
コード例 #11
0
ファイル: list_view.c プロジェクト: malooei/yeejoin-workspace
void rtgui_list_view_ondraw(struct rtgui_list_view* view)
{
    struct rtgui_rect rect;
    struct rtgui_dc* dc;

    dc = rtgui_dc_begin_drawing(RTGUI_WIDGET(view));
    if (dc == RT_NULL) return;

    rtgui_widget_get_rect(RTGUI_WIDGET(view), &rect);
    rtgui_dc_fill_rect(dc, &rect);

    switch (view->flag) {
    case RTGUI_LIST_VIEW_LIST:
        rtgui_list_view_onlistdraw(view, dc);
        break;

    case RTGUI_LIST_VIEW_ICON:
        rtgui_list_view_onicondraw(view, dc);
        break;
    }

    rtgui_dc_end_drawing(dc);
}
コード例 #12
0
ファイル: scrollbar.c プロジェクト: BernardXiong/realtouch
rt_uint32_t _rtgui_scrollbar_get_length(rtgui_scrollbar_t *bar)
{
	rtgui_rect_t rect;
	rt_uint32_t result;

	rtgui_widget_get_rect(RTGUI_WIDGET(bar), &rect);

	if(bar->orient & RTGUI_VERTICAL)
		result = rtgui_rect_height(rect) - 2*rtgui_rect_width(rect) - bar->thumb_len;
	else
		result = rtgui_rect_width(rect) - 2*rtgui_rect_height(rect) - bar->thumb_len;

	return result;
}
コード例 #13
0
ファイル: scrollbar.c プロジェクト: BernardXiong/realtouch
void rtgui_scrollbar_hide(rtgui_scrollbar_t* bar)
{
	rtgui_rect_t rect;
	struct rtgui_dc* dc;

	RT_ASSERT(bar != RT_NULL);

	/* begin drawing */
	dc = rtgui_dc_begin_drawing(RTGUI_WIDGET(bar));
	if(dc == RT_NULL)return;

	RTGUI_WIDGET_HIDE(bar);

	/* begin drawing */
	rtgui_widget_get_rect(RTGUI_WIDGET(bar), &rect);
	if((RTGUI_WIDGET(bar))->parent != RT_NULL)
		RTGUI_DC_BC(dc) = RTGUI_WIDGET_BACKGROUND(RTGUI_WIDGET(bar)->parent);
	else
		RTGUI_DC_BC(dc) = RTGUI_RGB(225, 228, 220);
	rtgui_dc_fill_rect(dc,&rect);

	rtgui_dc_end_drawing(dc);
}
コード例 #14
0
ファイル: edit.c プロジェクト: amsl/RTGUI
static void rtgui_edit_get_caret_rect(struct rtgui_edit *edit, rtgui_rect_t *rect, rtgui_point_t visual)
{
	RT_ASSERT(edit != RT_NULL);

	rtgui_widget_get_rect(RTGUI_WIDGET(edit), rect);

	rect->x1 += visual.x * edit->font_width + RTGUI_WIDGET_BORDER_SIZE(edit) + edit->margin;
	rect->x2 = rect->x1+2; /* caret width: 1 */
	rect->y1 += visual.y * edit->item_height + RTGUI_WIDGET_BORDER_SIZE(edit) + edit->margin;
	if((rect->y1 + edit->font_height) < (rect->y2 - RTGUI_WIDGET_BORDER_SIZE(edit) - edit->margin))
		rect->y2 = rect->y1 + edit->font_height;
	else
		rect->y2 = rect->y2 - RTGUI_WIDGET_BORDER_SIZE(edit) - edit->margin;
}
コード例 #15
0
ファイル: program.c プロジェクト: lgnq/mini2440
struct rtgui_panel* program_create(struct rtgui_panel* panel)
{
    int i = 0;
    struct rtgui_rect rect;

    RT_ASSERT(panel != RT_NULL);
    rtgui_widget_get_extent(RTGUI_WIDGET(panel), &rect);

    items = (struct rtgui_list_item *) rtgui_malloc((ITEM_MAX) * sizeof(struct rtgui_list_item));
    for(i=0; i< ITEM_MAX; i++) items[i].action = exec_app;

    /* create application list */
    rtgui_rect_inflate(&rect, -15);

    scan_app_dir(APP_PATH);
    if(pos >= 0) 
    {
        _view = rtgui_list_view_create(items, pos + 1, &rect, RTGUI_LIST_VIEW_ICON);
        rtgui_container_add_child(RTGUI_CONTAINER(panel), RTGUI_WIDGET(_view));
    }        

    return RTGUI_PANEL(panel);
}
コード例 #16
0
static void picture_show_next()
{
	DIR* dir;
	struct dirent* entry;
	rt_bool_t found, has_image;

	found = RT_FALSE; has_image = RT_FALSE;

__restart:
	dir = opendir(PICTURE_DIR);
	if (dir == RT_NULL)
	{
		rt_kprintf("open directory failed\n");
		return;
	}

	do
	{
		entry = readdir(dir);
		if (entry != RT_NULL)
		{
			if (strstr(entry->d_name, ".hdc") != RT_NULL ||
				strstr(entry->d_name, ".HDC") != RT_NULL)
			{
				/* this directory includes image */
				has_image = RT_TRUE;

				if (found == RT_TRUE || current_fn[0] == '\0')
				{
					strcpy(current_fn, entry->d_name);
					rtgui_widget_update(RTGUI_WIDGET(picture_view));

					closedir(dir);
					return;
				}

				/* it's a HDC image */
				if (strcmp(entry->d_name, current_fn) == 0)
					found = RT_TRUE;
			}
		}
	} while(entry != RT_NULL);

	/* close directory */
	closedir(dir);

	if (has_image != RT_TRUE) return;
	current_fn[0] = '\0';
	goto __restart;
}
コード例 #17
0
ファイル: station_list.c プロジェクト: Manish-cimcon/micro
/* select a station from list */
struct station_item* station_list_select(struct station_list* list, struct rtgui_workbench* workbench)
{
	rt_size_t index;
	rtgui_rect_t rect;
	rtgui_list_view_t *view;
	struct rtgui_list_item* items;
	struct station_item* station;
	char exit_str[] = "их╗п..";

	RT_ASSERT(list != RT_NULL);
	RT_ASSERT(workbench != RT_NULL);

	station = RT_NULL;

	items = (struct rtgui_list_item*) rt_malloc (sizeof(struct rtgui_list_item) * (list->count + 1));
	if (items == RT_NULL) return RT_NULL; /* no memory */

	/* create view */
	rtgui_widget_get_rect(RTGUI_WIDGET(workbench), &rect);
	view = rtgui_list_view_create(items, list->count + 1, &rect, RTGUI_LIST_VIEW_LIST);

	items[0].image = RT_NULL;
	items[0].action = station_list_selected;
	items[0].name = exit_str;
	items[0].parameter = view;

	for (index = 1; index < list->count + 1; index ++)
	{
		items[index].image = RT_NULL;
		items[index].action = station_list_selected;
		items[index].name = list->items[index - 1].title;
		items[index].parameter = view;
	}

	/* add view to workbench */
	rtgui_workbench_add_view(workbench, RTGUI_VIEW(view));

	/* show view as modal */
	if (rtgui_view_show(RTGUI_VIEW(view), RT_TRUE) == RTGUI_MODAL_OK)
	{
		station = &list->items[view->current_item - 1];
	}

	/* destroy view */
	rtgui_list_view_destroy(view);
	/* release items */
	rt_free(items);

	return station;
}
コード例 #18
0
void rtgui_workbench_destroy(rtgui_workbench_t* workbench)
{
	RT_ASSERT(workbench != RT_NULL);

	if (workbench->flag & RTGUI_WORKBENCH_FLAG_CLOSED)
	{
		rtgui_widget_destroy(RTGUI_WIDGET(workbench));
	}
	else
	{
		/* just close workbench */
		rtgui_workbench_close(workbench);
	}
}
コード例 #19
0
void rtgui_theme_draw_staticline(struct rtgui_staticline* staticline)
{
	struct rtgui_dc* dc;
	struct rtgui_rect rect;
	
	/* begin drawing */
	dc = rtgui_dc_begin_drawing(RTGUI_WIDGET(staticline));
	if (dc == RT_NULL) return ;

	rtgui_widget_get_rect(RTGUI_WIDGET(staticline), &rect);
	rtgui_dc_fill_rect(dc, &rect);
	
	if (staticline->orient == RTGUI_HORIZONTAL)
	{
		rtgui_dc_draw_horizontal_line(dc, rect.x1, rect.x2, rect.y1);
	}
	else
	{
		rtgui_dc_draw_vertical_line(dc, rect.x1, rect.y1, rect.y2);
	}
	
	rtgui_dc_end_drawing(dc);
}
コード例 #20
0
ファイル: scrollbar.c プロジェクト: BernardXiong/realtouch
rtgui_scrollbar_t* rtgui_scrollbar_create(rtgui_container_t *container,int left,int top,int w,int len,int orient)
{
	rtgui_scrollbar_t* bar;

	RT_ASSERT(container != RT_NULL);

	bar = (rtgui_scrollbar_t *)rtgui_widget_create(RTGUI_SCROLLBAR_TYPE);
	if(bar != RT_NULL)
	{
		rtgui_rect_t rect;

		rtgui_widget_get_rect(RTGUI_WIDGET(container), &rect);
		rtgui_widget_rect_to_device(RTGUI_WIDGET(container),&rect);
		rect.x1 += left;
		rect.y1 += top;

		bar->thumb_w = w;
		if(orient == RTGUI_VERTICAL)
		{
			rect.x2 = rect.x1+w;
			rect.y2 = rect.y1+len;
		}
		else
		{
			rect.x2 = rect.x1+len;
			rect.y2 = rect.y1+w;
		}

		rtgui_widget_set_rect(RTGUI_WIDGET(bar), &rect);

		bar->orient = orient;

		rtgui_container_add_child(container, RTGUI_WIDGET(bar));
	}

	return bar;
}
コード例 #21
0
ファイル: combobox.c プロジェクト: pengdonglin137/iboot
static rt_bool_t rtgui_combobox_onmouse_button(struct rtgui_combobox* box, struct rtgui_event_mouse* event)
{
	struct rtgui_rect rect;

	/* get widget rect */
	rect = RTGUI_WIDGET(box)->extent;

	/* move to the pull down button */
	rect.x1 = rect.x2 - RTGUI_COMBOBOX_BUTTON_WIDTH;
	if (rtgui_rect_contains_point(&rect, event->x, event->y) == RT_EOK)
	{
		/* handle mouse button on pull down button */
		if (event->button & RTGUI_MOUSE_BUTTON_LEFT &&
			event->button & RTGUI_MOUSE_BUTTON_DOWN)
		{
			box->pd_pressed = RT_TRUE;
			rtgui_widget_update(RTGUI_WIDGET(box));
		}
		else if (event->button & RTGUI_MOUSE_BUTTON_LEFT &&
			event->button & RTGUI_MOUSE_BUTTON_UP)
		{
			box->pd_pressed = RT_FALSE;
			rtgui_widget_update(RTGUI_WIDGET(box));

			/* pop pull down window */
			if (box->pd_win == RT_NULL)
			{
				rtgui_listbox_t  *list;

				/* create pull down window */
				rect = RTGUI_WIDGET(box)->extent;
				rect.y1 = rect.y2;
				rect.y2 = rect.y1 + 5 * (2 + rtgui_theme_get_selected_height());
				box->pd_win = rtgui_win_create(RT_NULL, "combo", &rect, RTGUI_WIN_STYLE_NO_TITLE);
				rtgui_win_set_ondeactivate(RTGUI_WIN(box->pd_win), rtgui_combobox_pulldown_hide);
				/* set user data to parent combobox */
				box->pd_win->user_data = (rt_uint32_t)box;

				/* create list box */
				rtgui_rect_inflate(&rect, -1);
				list = rtgui_listbox_create(box->items, box->items_count, &rect);
				rtgui_container_add_child(RTGUI_CONTAINER(box->pd_win), RTGUI_WIDGET(list));
				rtgui_widget_focus(RTGUI_WIDGET(list));

				rtgui_listbox_set_onitem(list, rtgui_combobox_pdwin_onitem);
				rtgui_win_set_ondeactivate(box->pd_win, rtgui_combobox_pdwin_ondeactive);
			}

			/* show combo box pull down window */
			rtgui_win_show(RTGUI_WIN(box->pd_win), RT_FALSE);
		}

		return RT_TRUE;
	}

	return RT_FALSE;
}
コード例 #22
0
ファイル: picture.c プロジェクト: amsl/RTGUI
static rt_bool_t picture_view_event_handler(rtgui_object_t *object, rtgui_event_t *event)
{
    if (event->type == RTGUI_EVENT_PAINT)
    {
        struct rtgui_dc* dc;
        struct rtgui_rect rect;
        struct rtgui_image* image = RT_NULL;
        char fn[32];

        dc = rtgui_dc_begin_drawing(RTGUI_WIDGET(object));
        if (dc == RT_NULL) return RT_FALSE;
        rtgui_widget_get_rect(RTGUI_WIDGET(object), &rect);

        /* open image */
        rt_snprintf(fn, sizeof(fn), "%s/%s", PICTURE_DIR, current_fn);
        rt_kprintf("pic fn: %s\n", fn);
		image = rtgui_image_create(fn, RT_FALSE);

        if (image != RT_NULL)
        {
            /* blit image */
            rtgui_image_blit(image, dc, &rect);
            /* destroy image */
            rtgui_image_destroy(image);
        }
        else
        {
            rtgui_dc_fill_rect(dc, &rect);
            rtgui_dc_draw_text(dc, "没有文件被打开", &rect);
        }
        rtgui_dc_end_drawing(dc);

        return RT_FALSE;
    }

    return rtgui_win_event_handler(object, event);
}
コード例 #23
0
ファイル: form.c プロジェクト: malooei/yeejoin-workspace
static rt_bool_t rtgui_form_event_handler(struct rtgui_widget *widget, struct rtgui_event *event)
{
	struct rtgui_form* form;
	//struct rtgui_event_command* ecmd;

	form = RTGUI_FORM(widget);

	switch (event->type) {
	case RTGUI_EVENT_PAINT:
		rtgui_form_ondraw(form);
		break;
#if 0
	case RTGUI_EVENT_COMMAND:
		ecmd = (struct rtgui_event_command*)event;
		switch (ecmd->command_id) {
		case SE_FORM_UPDATE:
			if (RTGUI_WIDGET_IS_FOCUSED(RTGUI_WIDGET(se_form)))
				rtgui_widget_update(RTGUI_WIDGET(se_form));
			break;

		case RE_FORM_UPDATE:
			rtgui_widget_update(RTGUI_WIDGET(re_form));
			break;

		case SYS_FORM_UPDATE:
			rtgui_widget_update(RTGUI_WIDGET(sys_form));
			break;
		}
		break;
#endif
	default:
		/* use form event handler */
		return rtgui_widget_event_handler(widget, event);
	}

	return RT_FALSE;
}
コード例 #24
0
ファイル: demo_view_window.c プロジェクト: EvanZheng/RTGUI
/* 关闭对话框时的回调函数 */
void diag_close(struct rtgui_timer *timer, void *parameter)
{
    cnt --;
    rt_sprintf(label_text, "closed then %d second!", cnt);

    /* 设置标签文本并更新控件 */
    rtgui_label_set_text(label, label_text);
    rtgui_widget_update(RTGUI_WIDGET(label));

    if (cnt == 0)
    {
        /* 超时,关闭对话框 */
        rtgui_win_destroy(autowin);
    }
}
コード例 #25
0
ファイル: menu.c プロジェクト: pengdonglin137/iboot
static rt_bool_t rtgui_menu_on_deactivate(rtgui_widget_t* widget, rtgui_event_t* event)
{
	rtgui_menu_t* menu = (rtgui_menu_t*) widget;

	if (menu->parent_menu != RT_NULL)
	{
		/* whether click on parent menu */
		if (rtgui_win_is_activated(RTGUI_WIN(menu->parent_menu)) == RT_TRUE &&
			menu->parent_menu->items[menu->parent_menu->items_list->current_item].submenu == (struct rtgui_menu_item_t *)menu->items)
			return RT_TRUE;
	}

	/* submenu is activate */
	if (menu->items[menu->items_list->current_item].type == RTGUI_ITEM_SUBMENU)
	{
		/* if sub menu activated, not hide menu */
		if (menu->sub_menu != RT_NULL && 
			rtgui_win_is_activated(RTGUI_WIN(menu->sub_menu)) == RT_TRUE)
			return RT_TRUE;
	}

	rtgui_win_hiden(RTGUI_WIN(menu));
	if (menu->on_menuhide != RT_NULL)
	{
		menu->on_menuhide(RTGUI_WIDGET(menu), RT_NULL);
	}

	/* if it's a submenu, try to hide parent menu */
	if (menu->parent_menu != RT_NULL &&
		rtgui_win_is_activated(RTGUI_WIN(menu->parent_menu)) == RT_FALSE)
	{
		rtgui_menu_on_deactivate(RTGUI_WIDGET(menu->parent_menu), event);
	}

	return RT_TRUE;
}
コード例 #26
0
ファイル: setup.c プロジェクト: Manish-cimcon/micro
void setting_ui(rtgui_workbench_t* workbench)
{
    rtgui_rect_t rect;

    father_workbench = workbench;

    /* add function view */
    rtgui_widget_get_rect(RTGUI_WIDGET(workbench), &rect);
    function_view = rtgui_list_view_create(function_list,
                                           sizeof(function_list) / sizeof(struct rtgui_list_item),
                                           &rect,
                                           RTGUI_LIST_VIEW_LIST);
    rtgui_workbench_add_view(workbench, RTGUI_VIEW(function_view));
    rtgui_view_show(RTGUI_VIEW(function_view), RT_FALSE);
}
コード例 #27
0
ファイル: window.c プロジェクト: 520lly/-android-source-code
static rt_bool_t rtgui_win_ondraw(struct rtgui_win* win)
{
	struct rtgui_dc* dc;
	struct rtgui_rect rect;
	struct rtgui_event_paint event;

	/* begin drawing */
	dc = rtgui_dc_begin_drawing(RTGUI_WIDGET(win));
	if (dc == RT_NULL) return RT_FALSE;

	/* get window rect */
	rtgui_widget_get_rect(RTGUI_WIDGET(win), &rect);
	/* fill area */
	rtgui_dc_fill_rect(dc, &rect);

	/* paint each widget */
	RTGUI_EVENT_PAINT_INIT(&event);
	event.wid = RT_NULL;
	rtgui_container_dispatch_event(RTGUI_CONTAINER(win), (rtgui_event_t*)&event);

	rtgui_dc_end_drawing(dc);

	return RT_FALSE;
}
コード例 #28
0
ファイル: window.c プロジェクト: 520lly/-android-source-code
void rtgui_win_hiden(struct rtgui_win* win)
{
	RT_ASSERT(win != RT_NULL);

	if (!RTGUI_WIDGET_IS_HIDE(RTGUI_WIDGET(win)) &&
		RTGUI_TOPLEVEL(win)->server != RT_NULL)
	{
		/* send hidden message to server */
		struct rtgui_event_win_hide ehide;
		RTGUI_EVENT_WIN_HIDE_INIT(&ehide);
		ehide.wid = win;

		if (rtgui_thread_send_sync(RTGUI_TOPLEVEL(win)->server, RTGUI_EVENT(&ehide),
			sizeof(struct rtgui_event_win_hide)) != RT_EOK)
		{
			rt_kprintf("hide win: %s failed\n", win->title);
			return;
		}

		/* set window hide and deactivated */
		RTGUI_WIDGET_HIDE(RTGUI_WIDGET(win));
		win->style &= ~RTGUI_WIN_STYLE_ACTIVATE;
	}
}
コード例 #29
0
/* 控件绘图函数 */
static void rtgui_mywidget_ondraw(struct rtgui_mywidget* me)
{
	struct rtgui_dc* dc;
	struct rtgui_rect rect;
	rt_uint16_t x, y;

	/* 获得目标DC,开始绘�?*/
	dc = rtgui_dc_begin_drawing(RTGUI_WIDGET(me));
	if (dc == RT_NULL) return;

	/* 获得窗口的尺�?*/
	rtgui_widget_get_rect(RTGUI_WIDGET(me), &rect);
	/* 绘制背景�?*/
	RTGUI_DC_BC(dc) = white;
	rtgui_dc_fill_rect(dc, &rect);

	/* 计算中心原点 */
	x = (rect.x2 + rect.x1)/2;
	y = (rect.y2 + rect.y1)/2;

	/* 绘制十字�?*/
	RTGUI_DC_FC(dc) = black;
	rtgui_dc_draw_hline(dc, rect.x1, rect.x2, y);
	rtgui_dc_draw_vline(dc, x, rect.y1, rect.y2);

	/* 根据状态绘制圆�?*/
	if (me->status == MYWIDGET_STATUS_ON)
		RTGUI_DC_FC(dc) = green;
	else
		RTGUI_DC_FC(dc) = red;
	rtgui_dc_fill_circle(dc, x, y, 5);

	/* 结束绘图 */
	rtgui_dc_end_drawing(dc);
	return;
}
コード例 #30
0
ファイル: plot.c プロジェクト: BernardXiong/realtouch
rt_bool_t rtgui_plot_onmvmodel(struct rtgui_plot *plot, struct rtgui_event *event)
{
    struct rtgui_event_mv_model *emodel = (struct rtgui_event_mv_model *)event;

    RT_ASSERT(plot);
    RT_ASSERT(event);

    switch (plot->ptype)
    {
    case RTGUI_PLOT_TYPE_SCAN:
        _rtgui_plot_update_scale(plot);
        rtgui_plot_ondraw(plot, event);
    case RTGUI_PLOT_TYPE_INCREMENTAL:
    {
        rt_uint16_t old_sc_x = plot->scale_x;
        rt_uint16_t old_sc_y = plot->scale_y;

        _rtgui_plot_update_scale(plot);

        if (old_sc_x != plot->scale_x || old_sc_y != plot->scale_y)
        {
            /* we need to repaint the whole widget as the scale changed. */
            rtgui_plot_ondraw(plot, event);
        }
        else
        {
            /* get dc for _rtgui_plot_curve_onpaint */
            struct rtgui_dc *dc;
            dc = rtgui_dc_begin_drawing(RTGUI_WIDGET(plot));
            if (dc == RT_NULL)
                return RT_FALSE;

            /* only draw the newly recieved data */
            _rtgui_plot_curve_onpaint(dc, plot,
                                      RTGUI_PLOT_CURVE(emodel->model),
                                      emodel->first_data_changed_idx,
                                      emodel->last_data_changed_idx + 1);

            rtgui_dc_end_drawing(dc);
        }
    }
    return RT_TRUE;
    default:
        RT_ASSERT(0);
    }

    return RT_TRUE;
}