rtgui_view_t *demo_view_buffer_animation(rtgui_workbench_t* workbench)
{
	rtgui_view_t *view;

	view = demo_view(workbench, "DC 缓冲区动画");
	if (view != RT_NULL)
		rtgui_widget_set_event_handler(RTGUI_WIDGET(view), animation_event_handler);

	rtgui_font_get_metrics(RTGUI_WIDGET_FONT(RTGUI_WIDGET(view)), "缓冲动画", &text_rect);
	if (dc_buffer == RT_NULL)
	{
		rtgui_rect_t rect;

		rect.x1 = 0; rect.x2 = rtgui_rect_width(text_rect) + 2;
		rect.y1 = 0; rect.y2 = rtgui_rect_height(text_rect) + 2;

		/* 创建 DC Buffer,长 50,宽 50 */
		dc_buffer = rtgui_dc_buffer_create(rtgui_rect_width(rect), rtgui_rect_height(rect));
		RTGUI_DC_FC(dc_buffer) = RTGUI_WIDGET_BACKGROUND(RTGUI_WIDGET(view));
		rtgui_dc_fill_rect(dc_buffer, &rect);
		RTGUI_DC_FC(dc_buffer) = black;
		rect.x1 = 1; rect.y1 = 1;
		rtgui_dc_draw_text(dc_buffer, "缓冲动画", &rect);
	}

	/* 启动定时器以触发动画 */
	timer = rtgui_timer_create(1, RT_TIMER_FLAG_PERIODIC, timeout, (void*)view);
	rtgui_timer_start(timer);

	return view;
}
Esempio n. 2
0
File: edit.c Progetto: amsl/RTGUI
void _rtgui_edit_constructor(struct rtgui_edit *edit)
{
	rtgui_rect_t font_rect;
	RTGUI_WIDGET_FLAG(edit) |= RTGUI_WIDGET_FLAG_FOCUSABLE;

	rtgui_widget_set_event_handler(edit, rtgui_edit_event_handler);
	rtgui_widget_set_onfocus(edit, rtgui_edit_onfocus);
	rtgui_widget_set_onunfocus(edit, rtgui_edit_onunfocus);
	
	RTGUI_WIDGET_FC(edit) = theme.foreground;
	RTGUI_WIDGET_BC(edit) = theme.blankspace;
	/* set default text align */
	RTGUI_WIDGET_TEXTALIGN(edit) = RTGUI_ALIGN_CENTER_VERTICAL;
	/* set proper of control */
	edit->caret_timer = RT_NULL;
	edit->caret = RT_NULL;

	edit->tabsize = 4;
	edit->margin  = 1;
	edit->max_rows = edit->max_cols = 0;
	edit->visual.x = edit->visual.y = 0;
	edit->upleft.x = edit->upleft.y = 0;
	edit->row_per_page = edit->col_per_page = 0;

	edit->update_buf = RT_NULL;
	edit->flag = RTGUI_EDIT_NONE;
#ifdef RTGUI_EDIT_USING_SCROLL
	edit->flag |= RTGUI_EDIT_VSCROLL;
	edit->flag |= RTGUI_EDIT_HSCROLL;
#endif
	/* allocate default line buffer */
	edit->bzsize = 16;
	
	rtgui_font_get_metrics(RTGUI_WIDGET_FONT(edit), "H", &font_rect);
	edit->font_width = rtgui_rect_width(font_rect);
	edit->font_height = rtgui_rect_height(font_rect);

	edit->dbl_buf = rtgui_dc_buffer_create(edit->font_width*2+1, edit->font_height+1);
	
	edit->head = RT_NULL;
	edit->tail = RT_NULL;
	edit->first_line = RT_NULL;
#ifdef RTGUI_EDIT_USING_SCROLL	
	edit->hscroll = RT_NULL;
	edit->vscroll = RT_NULL;
#endif
}
/* 创建用于DC Buffer操作演示用的视图 */
rtgui_view_t *demo_gui_dc_buffer(rtgui_view_t* parent_view)
{
	rtgui_view_t *view;

	if (dc_buffer == RT_NULL) {
		rtgui_rect_t rect = {0, 0, 50, 50};

		/* 创建 DC Buffer,长 50,宽 50 */
		dc_buffer = rtgui_dc_buffer_create(50, 50);
		RTGUI_DC_FC(dc_buffer) = blue;
		rtgui_dc_fill_rect(dc_buffer, &rect);

		RTGUI_DC_FC(dc_buffer) = red;
		rtgui_dc_draw_circle(dc_buffer, 25, 25, 10);
	}

	view = demo_view_create(parent_view, "缓冲DC演示");
	if (view == RT_NULL) return RT_NULL;
	/* 设置成自己的事件处理函数 */
	rtgui_widget_set_event_handler(view, dc_buffer_event_handler);

	return view;
}
/* 创建用于DC Buffer操作演示用的视图 */
rtgui_container_t *demo_view_dc_buffer()
{
	rtgui_container_t *view;

	if (dc_buffer == RT_NULL)
	{
		rtgui_rect_t rect = {0, 0, 50, 50};

		/* 创建 DC Buffer,长 50,宽 50 */
		dc_buffer = rtgui_dc_buffer_create(50, 50);
		RTGUI_DC_FC(dc_buffer) = blue;
		rtgui_dc_fill_rect(dc_buffer, &rect);

		RTGUI_DC_FC(dc_buffer) = red;
		rtgui_dc_draw_circle(dc_buffer, 25, 25, 10);
	}

	view = demo_view("缓冲DC演示");
	if (view != RT_NULL)
		/* 设置成自己的事件处理函数 */
		rtgui_object_set_event_handler(RTGUI_OBJECT(view), dc_buffer_event_handler);

	return view;
}
/* 创建用于DC Buffer操作演示用的视图 */
rtgui_view_t *demo_view_dc_buffer(rtgui_workbench_t* workbench)
{
	rtgui_view_t *view;

	if (dc_buffer == RT_NULL)
	{
		rtgui_rect_t rect = {0, 0, 50, 50};

		/* 创建 DC Buffer,长 50,宽 50 */
		dc_buffer = rtgui_dc_buffer_create(50, 50);
		RTGUI_DC_FC(dc_buffer) = blue;
		rtgui_dc_fill_rect(dc_buffer, &rect);

		RTGUI_DC_FC(dc_buffer) = red;
		rtgui_dc_draw_circle(dc_buffer, 25, 25, 10);
	}

	view = demo_view(workbench, "缓冲DC演示");
	if (view != RT_NULL)
		/* 设置成自己的事件处理函数 */
		rtgui_widget_set_event_handler(RTGUI_WIDGET(view), dc_buffer_event_handler);

	return view;
}
Esempio n. 6
0
static struct app_list_view *app_list_create(rtgui_rect_t *rect,
                                             struct app_item *items,
                                             rt_uint16_t item_count,
                                             rt_uint8_t row_items,
                                             rt_uint8_t col_items,
                                             rtgui_image_t *bg_image)
{
    struct app_list_view *view = RT_NULL;
    view = (struct app_list_view *)rtgui_malloc(sizeof(struct app_list_view));
    view->rect = *rect;
    view->view_rect.x1 = rect->x1;
    view->view_rect.x2 = rect->x2;
    view->view_rect.y1 = rect->y1 + 4 * LIST_MARGIN;
    view->view_rect.y2 = rect->y2 - 6 * LIST_MARGIN;
    view->col_items = col_items;
    view->row_items = row_items;
    view->current_page = 0;
    view->old_page = 0;
    view->page_items = col_items * row_items;
    view->page_count = (item_count + view->page_items - 1) / view->page_items;
    view->current_item = -1;
    view->items = items;
    view->items_count = item_count;
    if (bg_image != RT_NULL)
    {
        rtgui_rect_t bg_rect;

        RTGUI_RECT(bg_rect, 0, 0, bg_image->w, bg_image->h);
        /* create background dc buffer */
        view->bg_buffer = rtgui_dc_buffer_create(bg_image->w, bg_image->h);
        /* draw background image to buffer */
        rtgui_image_blit(bg_image, view->bg_buffer, &bg_rect);
    }
    /* create the main menu dc buffer */
    view->view_buffer =
        rtgui_dc_buffer_create_pixformat(RTGRAPHIC_PIXEL_FORMAT_ARGB888,
                                         rtgui_rect_width(view->view_rect) *
                                         view->page_count,
                                         rtgui_rect_height(view->view_rect));
    RTGUI_DC_BC(view->view_buffer) = RTGUI_ARGB(0, 0, 0, 0);

    view->pm_rect.x1 = 0;
    view->pm_rect.y1 = rect->y2 - 6 * LIST_MARGIN;
    view->pm_rect.x2 = PAGE_MARK_ITEM_WIDTH * view->page_count + PAGE_MARK_MARGIN *
                       (view->page_count - 1);
    view->pm_rect.y2 = view->pm_rect.y1 + PAGE_MARK_ITEM_HEIGHT;

    view->pm_buffer =
        rtgui_dc_buffer_create_pixformat(RTGRAPHIC_PIXEL_FORMAT_ARGB888,
                                         rtgui_rect_width(view->pm_rect) ,
                                         rtgui_rect_height(view->pm_rect));
    rtgui_rect_moveto_align(rect, &view->pm_rect, RTGUI_ALIGN_CENTER_HORIZONTAL);

    RTGUI_DC_BC(view->pm_buffer) = RTGUI_ARGB(0, 0, 0, 0);

    view->bgdisp_point.x = 0;
    view->bgdisp_point.y = 0;
    view->listdisp_point.x = 0;
    view->listdisp_point.y = 0;
    view->on_select = RT_NULL;
    return view;
}