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; }
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; }
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; }