void tetris_refreshmap(struct rtgui_dc *dc) //刷新地图 { rt_uint8_t i, j; rt_uint8_t buf[5]; rtgui_rect_t rect = {XOFFSET, YOFFSET, XOFFSET + 240, YOFFSET + 400}; RTGUI_DC_FC(dc) = RTGUI_RGB(0x55, 0x55, 0x55); rtgui_dc_fill_rect_forecolor(dc, &rect); rect.x1 -= 10; rect.x2 += 150; rect.y1 -= 10; rect.y2 += 10; RTGUI_DC_FC(dc) = RTGUI_RGB(0x00, 0x00, 0xff); rtgui_dc_draw_rect(dc, &rect); rect.x1 += 290; rect.x2 -= 30; rect.y1 += 40; rect.y2 -= 360; RTGUI_DC_FC(dc) = RTGUI_RGB(0x00, 0x00, 0x00); rtgui_dc_draw_text(dc, "下一个", &rect); rect.y1 += 130; rect.y2 += 130; rtgui_dc_draw_text(dc, "总得分", &rect); rect.y1 += 80; rect.y2 += 80; rtgui_dc_draw_text(dc, "LEVEL", &rect); RTGUI_DC_FC(dc) = RTGUI_RGB(0xff, 0x00, 0x00); rect.x1 += 20; rect.x2 += 20; rect.y1 -= 60; rect.y2 -= 60; rt_sprintf(buf, "%d", score); rtgui_dc_fill_rect(dc, &rect); rtgui_dc_draw_text(dc, buf, &rect); rect.y1 += 80; rect.y2 += 80; rt_sprintf(buf, "%d", level); rtgui_dc_fill_rect(dc, &rect); rtgui_dc_draw_text(dc, buf, &rect); for (i = 0; i < 25; i++) { for (j = 0; j < 15; j++) { if (tetris_map[j][i] != 0) { tetris_drawbox(dc, j, i, tetris_colors[tetris_map[j][i]]); } } } }
void rtgui_combo_ondraw(rtgui_combo_t *cbo) { rtgui_rect_t rect; rtgui_dc_t* dc; RT_ASSERT(cbo != RT_NULL); /* begin drawing */ dc = rtgui_dc_begin_drawing(cbo); if(dc == RT_NULL)return; rtgui_widget_get_rect(cbo, &rect); rtgui_rect_inflate(&rect,-RTGUI_WIDGET_BORDER_SIZE(cbo)); if(RTGUI_WIDGET_IS_ENABLE(cbo)) RTGUI_DC_BC(dc) = theme.blankspace; else RTGUI_DC_BC(dc) = theme.background; rtgui_dc_fill_rect(dc, &rect); rtgui_rect_inflate(&rect,RTGUI_WIDGET_BORDER_SIZE(cbo)); rtgui_dc_draw_border(dc, &rect,RTGUI_WIDGET_BORDER_STYLE(cbo)); if(RC_H(rect)<RTGUI_COMBO_HEIGHT)return; /* draw downarrow button */ rect.x1 = rect.x2-RTGUI_COMBO_BUTTON_WIDTH; RTGUI_DC_BC(dc) = theme.background; rtgui_dc_fill_rect(dc, &rect); if(cbo->style & RTGUI_COMBO_STYLE_DOWNARROW_UP) { rtgui_dc_draw_border(dc, &rect, theme.style); rtgui_dc_draw_byte(dc,rect.x1+(rect.x2-rect.x1-7)/2, rect.y1+(rect.y2-rect.y1-4)/2, 4, combo_down_bmp); } else if(cbo->style & RTGUI_COMBO_STYLE_DOWNARROW_DOWN) { rtgui_dc_draw_border(dc, &rect, theme.style); rtgui_dc_draw_byte(dc,rect.x1+(rect.x2-rect.x1-7)/2+1, rect.y1+(rect.y2-rect.y1-4)/2+1, 4, combo_down_bmp); } if(cbo->tbox != RT_NULL) { RTGUI_DC_FC(dc) = theme.foreground; rtgui_textbox_ondraw(cbo->tbox); } rtgui_dc_end_drawing(dc); }
static void rtgui_combobox_ondraw(struct rtgui_combobox* box) { /* draw button */ rtgui_color_t bc; struct rtgui_dc* dc; struct rtgui_rect rect, r; /* begin drawing */ dc = rtgui_dc_begin_drawing(RTGUI_WIDGET(box)); if (dc == RT_NULL) return; bc = RTGUI_WIDGET_BACKGROUND(RTGUI_WIDGET(box)); /* get widget rect */ rtgui_widget_get_rect(RTGUI_WIDGET(box), &rect); RTGUI_WIDGET_BACKGROUND(RTGUI_WIDGET(box)) = white; /* fill widget rect with background color */ rtgui_dc_fill_rect(dc, &rect); rtgui_dc_draw_rect(dc, &rect); /* draw current item */ if (box->current_item < box->items_count) { rect.x1 += 5; rtgui_dc_draw_text(dc, box->items[box->current_item].name, &rect); } /* restore background color */ RTGUI_WIDGET_BACKGROUND(RTGUI_WIDGET(box)) = bc; /* draw pull down button */ rect.x1 = rect.x2 - RTGUI_COMBOBOX_BUTTON_WIDTH; rtgui_rect_inflate(&rect, -1); rtgui_dc_fill_rect(dc, &rect); if (box->pd_pressed == RT_TRUE) rtgui_dc_draw_border(dc, &rect, RTGUI_BORDER_SUNKEN); else rtgui_dc_draw_border(dc, &rect, RTGUI_BORDER_RAISE); r.x1 = 0; r.y1 = 0; r.x2 = 8; r.y2 = 4; rtgui_rect_moveto_align(&rect, &r, RTGUI_ALIGN_CENTER_HORIZONTAL | RTGUI_ALIGN_CENTER_VERTICAL); rtgui_dc_draw_byte(dc, r.x1, r.y1, 4, down_arrow); /* end drawing */ rtgui_dc_end_drawing(dc); return; }
void _draw_default(struct rtgui_object *object, rtgui_event_t* event) { struct rtgui_widget *widget = RTGUI_WIDGET(object); struct rtgui_dc* dc; rtgui_rect_t rect; /* 因为用的是demo container,上面本身有一部分控件,所以在绘图时先要让demo container先绘图 */ rtgui_container_event_handler(object, event); /* 获得控件所属的DC */ dc = rtgui_dc_begin_drawing(widget); if (dc == RT_NULL) /* 如果不能正常获得DC,返回(如果控件或父控件是隐藏状态,DC是获取不成功的) */ return; /* 获得demo container允许绘图的区域 */ demo_view_get_logic_rect(RTGUI_CONTAINER(widget), &rect); /* 擦除所有 */ RTGUI_WIDGET_BACKGROUND(widget) = default_background; rtgui_dc_fill_rect(dc, &rect); /* 显示提示 */ rtgui_dc_draw_text(dc, "按任意键开始/停止测试...", &rect); /* 绘图完成 */ rtgui_dc_end_drawing(dc); }
void _onidle(struct rtgui_object *object, rtgui_event_t *event) { rtgui_color_t color; rtgui_rect_t rect, draw_rect; struct rtgui_dc *dc; /* 获得控件所属的DC */ // dc = rtgui_dc_hw_create(RTGUI_WIDGET(container)); dc = rtgui_dc_begin_drawing(RTGUI_WIDGET(container)); if (dc == RT_NULL) return; demo_view_get_logic_rect(RTGUI_CONTAINER(container), &rect); draw_rect.x1 = RAND(rect.x1, rect.x2); draw_rect.y1 = RAND(rect.y1, rect.y2); draw_rect.x2 = RAND(draw_rect.x1, rect.x2); draw_rect.y2 = RAND(draw_rect.y1, rect.y2); color = RTGUI_RGB(rand() % 255, rand() % 255, rand() % 255); RTGUI_WIDGET_BACKGROUND(RTGUI_WIDGET(container)) = color; rtgui_dc_fill_rect(dc, &draw_rect); /* 绘图完成 */ rtgui_dc_end_drawing(dc); }
rt_bool_t picture_win_onpaint(struct rtgui_object* object, struct rtgui_event* event) { struct rtgui_widget *widget = RTGUI_WIDGET(object); if (event->type == RTGUI_EVENT_PAINT) { struct rtgui_dc* dc; struct rtgui_rect rect; struct rtgui_event_paint event; rt_kprintf("handle custom paint event\n"); /* begin drawing */ dc = rtgui_dc_begin_drawing(RTGUI_WIDGET(widget)); if (dc == RT_NULL) { rt_kprintf("dc init failed\n"); return RT_FALSE; } /* get window rect */ rtgui_widget_get_rect(RTGUI_WIDGET(widget), &rect); RTGUI_DC_BC(dc) = white; rtgui_dc_fill_rect(dc, &rect); rtgui_dc_end_drawing(dc); return RT_FALSE; } else { return rtgui_win_event_handler(object, event); } }
static void _rtgui_notebook_ondraw(struct rtgui_notebook *notebook) { struct rtgui_dc* dc; dc = rtgui_dc_begin_drawing(RTGUI_WIDGET(notebook)); if (dc == RT_NULL) return; if (notebook->count == 0) { rtgui_rect_t rect; rtgui_widget_get_rect(RTGUI_WIDGET(notebook), &rect); rtgui_dc_fill_rect(dc, &rect); } else { if (notebook->current == RTGUI_NOT_FOUND) notebook->current = 0; _rtgui_notebook_draw_bar(notebook, dc); /* draw current tab */ rtgui_widget_update(notebook->childs[notebook->current].widget); } rtgui_dc_end_drawing(dc); }
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; }
static rt_bool_t view_event_handler(struct rtgui_widget* widget, struct rtgui_event* event) { if (event->type == RTGUI_EVENT_PAINT) { struct rtgui_dc* dc; struct rtgui_rect rect; dc = rtgui_dc_begin_drawing(widget); if (dc == RT_NULL) return RT_FALSE; rtgui_widget_get_rect(widget, &rect); rtgui_dc_fill_rect(dc, &rect); if (background != RT_NULL) rtgui_image_blit(background, dc, &rect); rtgui_dc_draw_text(dc, "Radio Today", &rect); rtgui_dc_end_drawing(dc); return RT_FALSE; } return rtgui_view_event_handler(widget, event); }
static void _draw_textview(rtgui_textview_t *textview) { struct rtgui_dc* dc; struct rtgui_rect rect, font_rect; char* line; rt_ubase_t line_index, item_height; rtgui_font_get_metrics(RTGUI_WIDGET_FONT(RTGUI_WIDGET(textview)), "W", &font_rect); item_height = rtgui_rect_height(font_rect) + 3; dc = rtgui_dc_begin_drawing(RTGUI_WIDGET(textview)); if (dc == RT_NULL) return ; /* fill rect */ rtgui_widget_get_rect(RTGUI_WIDGET(textview), &rect); rtgui_dc_fill_rect(dc, &rect); rect.x1 += 3; rect.x2 -= 3; for (line_index = textview->line_current; (line_index < textview->line_current + textview->line_page_count) && (line_index < textview->line_count); line_index ++) { line = (char* )_get_line_text(textview, line_index); rtgui_dc_draw_text(dc, line, &rect); rect.y1 += item_height; } rtgui_dc_end_drawing(dc); }
void rtgui_combo_draw_downarrow(rtgui_combo_t *cbo) { rtgui_rect_t rect; rtgui_dc_t* dc; RT_ASSERT(cbo != RT_NULL); /* begin drawing */ dc = rtgui_dc_begin_drawing(cbo); if(dc == RT_NULL)return; rtgui_widget_get_rect(cbo, &rect); rect.x1 = rect.x2-RTGUI_COMBO_BUTTON_WIDTH-RTGUI_WIDGET_BORDER_SIZE(cbo); rect.y1 += RTGUI_WIDGET_BORDER_SIZE(cbo); rect.x2 -= RTGUI_WIDGET_BORDER_SIZE(cbo); rect.y2 -= RTGUI_WIDGET_BORDER_SIZE(cbo); RTGUI_DC_BC(dc) = theme.background; rtgui_dc_fill_rect(dc, &rect); if(cbo->style & RTGUI_COMBO_STYLE_DOWNARROW_UP) { rtgui_dc_draw_border(dc, &rect,RTGUI_WIDGET_BORDER_STYLE(cbo)); rtgui_dc_draw_byte(dc,rect.x1+4, rect.y1+8, 4, combo_down_bmp); } else if(cbo->style & RTGUI_COMBO_STYLE_DOWNARROW_DOWN) { rtgui_dc_draw_border(dc, &rect,RTGUI_WIDGET_BORDER_STYLE(cbo)); rtgui_dc_draw_byte(dc,rect.x1+5, rect.y1+9, 4, combo_down_bmp); } rtgui_dc_end_drawing(dc); }
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 _draw_default(PVOID wdt, rtgui_event_t* event) { struct rtgui_dc* dc; rtgui_widget_t* widget = (rtgui_widget_t*)wdt; rtgui_rect_t rect; /* 因为用的是demo view,上面本身有一部分控件,所以在绘图时先要让demo view先绘图 */ rtgui_view_event_handler(widget, event); /* 获得控件所属的DC */ dc = rtgui_dc_begin_drawing(widget); if (dc == RT_NULL) /* 如果不能正常获得DC,返回(如果控件或父控件是隐藏状态,DC是获取不成功的) */ return ; /* 获得demo view允许绘图的区域 */ rtgui_widget_get_rect(widget, &rect); rtgui_rect_inflate(&rect, -5); rect.y1 += 35; /* 擦除所有 */ RTGUI_WIDGET_BACKGROUND(widget) = default_background; rtgui_dc_fill_rect(dc, &rect); /* 显示提示 */ rtgui_dc_draw_text(dc, "按鼠标键开始/停止测试...", &rect); /* 绘图完成 */ rtgui_dc_end_drawing(dc); }
void _onidle(PVOID wdt, rtgui_event_t *event) { rtgui_color_t color; rtgui_rect_t rect, draw_rect; struct rtgui_dc *dc; /* 获得控件所属的DC */ dc = rtgui_dc_begin_drawing(view); if (dc == RT_NULL) return ; rtgui_widget_get_rect(view, &rect); rtgui_rect_inflate(&rect, -5); rect.y1 += 35; draw_rect.x1 = RAND(rect.x1, rect.x2); draw_rect.y1 = RAND(rect.y1, rect.y2); draw_rect.x2 = RAND(draw_rect.x1, rect.x2); draw_rect.y2 = RAND(draw_rect.y1, rect.y2); color = RTGUI_RGB(rand() % 255, rand() % 255, rand() % 255); RTGUI_WIDGET_BACKGROUND(view) = color; rtgui_dc_fill_rect(dc, &draw_rect); /* 绘图完成 */ rtgui_dc_end_drawing(dc); }
void rtgui_textbox_ondraw(rtgui_textbox_t *box) { /* draw button */ rtgui_rect_t rect; struct rtgui_dc *dc; rtgui_color_t fc; RT_ASSERT(box != RT_NULL); /* begin drawing */ dc = rtgui_dc_begin_drawing(RTGUI_WIDGET(box)); if (dc == RT_NULL) return; /* get widget rect */ rtgui_widget_get_rect(RTGUI_WIDGET(box), &rect); fc = RTGUI_WIDGET_FOREGROUND(box); rtgui_rect_inflate(&rect, -1); /* fill widget rect with white color */ RTGUI_WIDGET_BACKGROUND(box) = white; rtgui_dc_fill_rect(dc, &rect); rtgui_rect_inflate(&rect, 1); /* draw border */ RTGUI_WIDGET_FOREGROUND(box) = RTGUI_RGB(123, 158, 189); rtgui_dc_draw_rect(dc, &rect); /* draw text */ RTGUI_WIDGET_FOREGROUND(box) = fc; if (box->text != RT_NULL) { rect.x1 += RTGUI_WIDGET_DEFAULT_MARGIN; /* draw single text */ if (box->flag & RTGUI_TEXTBOX_MASK) { /* draw mask char */ rt_size_t len = rt_strlen(box->text); if (len > 0) { char *text_mask = rtgui_malloc(len + 1); rt_memset(text_mask, box->mask_char, len + 1); text_mask[len] = 0; rtgui_dc_draw_text(dc, text_mask+box->first_pos, &rect); rtgui_free(text_mask); } } else { rtgui_dc_draw_text(dc, box->text+box->first_pos, &rect); } } rtgui_dc_end_drawing(dc); }
void rtgui_listbox_ondraw(struct rtgui_listbox* box) { struct rtgui_rect rect, item_rect; struct rtgui_dc* dc; rt_uint16_t page_index, index; const struct rtgui_listbox_item* item; dc = rtgui_dc_begin_drawing(RTGUI_WIDGET(box)); if (dc == RT_NULL) return; rtgui_widget_get_rect(RTGUI_WIDGET(box), &rect); rtgui_dc_fill_rect(dc, &rect); rect.x2 -= 1; rect.y2 -= 1; /* draw focused border */ if (RTGUI_WIDGET_IS_FOCUSED(RTGUI_WIDGET(box))) rtgui_dc_draw_focus_rect(dc, &rect); /* get item base rect */ item_rect = rect; item_rect.x1 += 1; item_rect.x2 -= 1; item_rect.y1 += 2; item_rect.y2 = item_rect.y1 + (2 + rtgui_theme_get_selected_height()); /* get current page */ page_index = (box->current_item / box->page_items) * box->page_items; for (index = 0; index < box->page_items; index ++) { if (page_index + index >= box->items_count) break; item = &(box->items[page_index + index]); if (page_index + index == box->current_item) { rtgui_theme_draw_selected(dc, &item_rect); } item_rect.x1 += LIST_MARGIN; if (item->image != RT_NULL) { rtgui_image_blit(item->image, dc, &item_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); } rtgui_dc_end_drawing(dc); }
static rt_bool_t view_event_handler(struct rtgui_widget* widget, struct rtgui_event* event) { if (event->type == RTGUI_EVENT_PAINT) { struct rtgui_dc* dc; struct rtgui_rect rect; rtgui_image_t *image; dc = rtgui_dc_begin_drawing(widget); if (dc == RT_NULL) return RT_FALSE; rtgui_widget_get_rect(widget, &rect); rtgui_dc_fill_rect(dc, &rect); rtgui_dc_draw_hline(dc, rect.x1, rect.x2, rect.y2 - 1); /* draw RT-Thread logo */ image = rtgui_image_create_from_file("hdc", "/resource/RTT.hdc", RT_FALSE); if (image != RT_NULL) { rtgui_image_blit(image, dc, &rect); rtgui_image_destroy(image); image = RT_NULL; } if (network_image != RT_NULL) { rect.x1 = rect.x2 - (network_image->w + 2); rtgui_image_blit(network_image, dc, &rect); } rtgui_dc_end_drawing(dc); return RT_FALSE; } else if (event->type == RTGUI_EVENT_MOUSE_BUTTON) { struct rtgui_rect rect; struct rtgui_event_mouse* emouse; emouse = (struct rtgui_event_mouse*) event; rtgui_widget_get_rect(widget, &rect); rect.y2 = rect.y1 + 100; if (emouse->button & (RTGUI_MOUSE_BUTTON_LEFT | RTGUI_MOUSE_BUTTON_UP) && (rtgui_rect_contains_point(&rect, emouse->x, emouse->y) == RT_EOK)) { /* enter function view */ player_notfiy_functionview(); } } return rtgui_view_event_handler(widget, event); }
static void app_list_pagemark_change(struct app_list_view *view) { rtgui_rect_t rect = {0, 0, PAGE_MARK_ITEM_WIDTH, PAGE_MARK_ITEM_HEIGHT}; if (view->current_page != view->old_page) { /* draw the current page mark */ rect.x1 = view->current_page * (PAGE_MARK_ITEM_WIDTH + PAGE_MARK_MARGIN); rect.x2 = rect.x1 + PAGE_MARK_ITEM_WIDTH; RTGUI_DC_BC(view->pm_buffer) = RTGUI_ARGB(0, 0, 0, 0); rtgui_dc_fill_rect(view->pm_buffer, &rect); rtgui_image_blit(ycircle_image, view->pm_buffer, &rect); /* draw the old page mark */ rect.x1 = view->old_page * (PAGE_MARK_ITEM_WIDTH + PAGE_MARK_MARGIN); rect.x2 = rect.x1 + PAGE_MARK_ITEM_WIDTH; RTGUI_DC_BC(view->pm_buffer) = RTGUI_ARGB(0, 0, 0, 0); rtgui_dc_fill_rect(view->pm_buffer, &rect); rtgui_image_blit(gcircle_image, view->pm_buffer, &rect); view->old_page = view->current_page; } }
static void _rtgui_menu_item_ondraw(struct rtgui_listctrl *list, struct rtgui_dc* dc, rtgui_rect_t* rect, rt_uint16_t index) { rtgui_rect_t item_rect; struct rtgui_menu_item* item; item_rect = *rect; item_rect.x1 += 5; /* re-fill item */ if (list->current_item == index) { rtgui_color_t bc; bc = RTGUI_WIDGET_BACKGROUND(RTGUI_WIDGET(list)); RTGUI_WIDGET_BACKGROUND(RTGUI_WIDGET(list)) = blue; rtgui_dc_fill_rect(dc, rect); RTGUI_WIDGET_BACKGROUND(RTGUI_WIDGET(list)) = bc; } /* get menu item */ item = (rtgui_menu_item_t*)list->items; item = &item[index]; if (item->type == RTGUI_ITEM_SUBMENU) { rtgui_rect_t r = {0, 0, 8, 8}; rtgui_dc_draw_text(dc, item->label, &item_rect); item_rect.x1 = item_rect.x2 - 16; item_rect.x2 -= 8; rtgui_rect_moveto_align(&item_rect, &r, RTGUI_ALIGN_CENTER_HORIZONTAL | RTGUI_ALIGN_CENTER_VERTICAL); rtgui_dc_draw_byte(dc, r.x1, r.y1, 8, right_arrow); } else if (item->type == RTGUI_ITEM_SEPARATOR) { rtgui_dc_draw_horizontal_line(dc, item_rect.x1, item_rect.x2, (item_rect.y2 + item_rect.y1)/2); } else if (item->type == RTGUI_ITEM_CHECK) { /* not support right now */ } else { /* normal menu item */ rtgui_dc_draw_text(dc, item->label, &item_rect); if (item->image != RT_NULL) rtgui_image_blit(item->image, dc, &item_rect); } }
void rtgui_form_ondraw(struct rtgui_form *form) { struct rtgui_dc* dc; struct rtgui_rect rect, row_rect; const struct rtgui_font *font; char *buf; char *pch1; int i, j; if (NULL == form) { form_debug(("fun:%s(), param error!\n", __FUNCTION__)); return; } dc = rtgui_dc_begin_drawing(RTGUI_WIDGET(form)); if (dc == RT_NULL) return; buf = rt_malloc(form->bytes_of_row); if (NULL == buf) { form_debug(("fun:%s(), line:%d:%d malloc fail!\n", __FUNCTION__, __LINE__, form->bytes_of_row)); rtgui_dc_end_drawing(dc); return; } rtgui_widget_get_rect(RTGUI_WIDGET(form), &rect); rtgui_dc_fill_rect(dc, &rect); font = RTGUI_DC_FONT(dc); if (font == RT_NULL) font = rtgui_font_default(); draw_form_head(form, font, dc, &rect, &row_rect, buf); j = form->row_cnt_of_fbody; pch1 = form->fbody; for (i=0; i<j; ++i) { row_rect.y1 += font->height + GAG_BETWEEN_ROW; row_rect.y2 += font->height + GAG_BETWEEN_ROW; rtgui_dc_draw_text(dc, pch1, &row_rect); form_debug(("fun:%s(), %dth line:%s!\n", __FUNCTION__, i, pch1)); pch1 += form->bytes_of_row; } rtgui_dc_end_drawing(dc); rt_free(buf); return; }
static void rtgui_listctrl_update_current(struct rtgui_listctrl *ctrl, rt_uint16_t old_item) { struct rtgui_dc *dc; rtgui_rect_t rect, item_rect; if (old_item / ctrl->page_items != ctrl->current_item / ctrl->page_items) { /* it's not a same page, update all */ rtgui_widget_update(RTGUI_WIDGET(ctrl)); return; } dc = rtgui_dc_begin_drawing(RTGUI_WIDGET(ctrl)); if (dc == RT_NULL) return; _rtgui_listctrl_get_rect(ctrl, &rect); rect.x2 -= 1; rect.y2 -= 1; item_rect = rect; /* get old item's rect */ item_rect.x1 += 1; item_rect.x2 -= 1; item_rect.y1 += 2; item_rect.y1 += (old_item % ctrl->page_items) * (2 + ctrl->item_height); item_rect.y2 = item_rect.y1 + (2 + ctrl->item_height); /* draw old item */ rtgui_dc_fill_rect(dc, &item_rect); if (ctrl->on_item_draw != RT_NULL) ctrl->on_item_draw(ctrl, dc, &item_rect, old_item); /* draw current item */ item_rect = rect; /* get current item's rect */ item_rect.x1 += 1; item_rect.x2 -= 1; item_rect.y1 += 2; item_rect.y1 += (ctrl->current_item % ctrl->page_items) * (2 + ctrl->item_height); item_rect.y2 = item_rect.y1 + (2 + ctrl->item_height); /* draw current item */ rtgui_theme_draw_selected(dc, &item_rect); if (ctrl->on_item_draw != RT_NULL) ctrl->on_item_draw(ctrl, dc, &item_rect, ctrl->current_item); rtgui_dc_end_drawing(dc); }
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); if (strstr(fn, ".hdc") != RT_NULL || strstr(fn, ".HDC") != RT_NULL) { image = rtgui_image_create_from_file("hdc", fn, RT_FALSE); } else if (strstr(fn, ".bmp") != RT_NULL || strstr(fn, ".BMP") != RT_NULL) { image = rtgui_image_create_from_file("bmp", 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_container_event_handler(object, event); }
static void _rtgui_listctrl_ondraw(struct rtgui_listctrl *ctrl) { struct rtgui_rect rect, item_rect; struct rtgui_dc *dc; rt_uint16_t page_index, index; dc = rtgui_dc_begin_drawing(RTGUI_WIDGET(ctrl)); if (dc == RT_NULL) return; _rtgui_listctrl_get_rect(ctrl, &rect); rtgui_dc_fill_rect(dc, &rect); rect.x2 -= 1; rect.y2 -= 1; /* get item base rect */ item_rect = rect; item_rect.x1 += 1; item_rect.x2 -= 1; item_rect.y1 += 2; item_rect.y2 = item_rect.y1 + (2 + ctrl->item_height); /* get current page */ page_index = (ctrl->current_item / ctrl->page_items) * ctrl->page_items; for (index = 0; index < ctrl->page_items; index ++) { if (page_index + index >= ctrl->items_count) break; if (page_index + index == ctrl->current_item) { rtgui_theme_draw_selected(dc, &item_rect); } if (ctrl->on_item_draw != RT_NULL) { ctrl->on_item_draw(ctrl, dc, &item_rect, page_index + index); } /* move to next item position */ item_rect.y1 += (ctrl->item_height + 2); item_rect.y2 += (ctrl->item_height + 2); } /* draw scrollbar */ _rtgui_listctrl_scrollbar_ondraw(ctrl, dc); rtgui_dc_end_drawing(dc); }
static void _rtgui_listctrl_scrollbar_ondraw(struct rtgui_listctrl* ctrl, struct rtgui_dc* dc) { rtgui_rect_t rect; rt_uint32_t height, y1; /* get scrollbar rect */ _rtgui_listctrl_get_scrollbar_rect(ctrl, &rect); rtgui_dc_fill_rect(dc, &rect); height = rtgui_rect_height(rect); height = height / ((ctrl->items_count + (ctrl->page_items - 1))/ctrl->page_items); y1 = (ctrl->current_item / ctrl->page_items) * height; rect.y1 = rect.y1 + y1; rect.y2 = rect.y1 + height; rtgui_theme_draw_selected(dc, &rect); }
static void info_timer_timeout(rtgui_timer_t* timer, void* parameter) { struct rtgui_dc* dc; rtgui_color_t saved; dc = rtgui_dc_begin_drawing(RTGUI_WIDGET(home_view)); if (dc == RT_NULL) return ; saved = RTGUI_WIDGET_FOREGROUND(RTGUI_WIDGET(home_view)); RTGUI_WIDGET_FOREGROUND(RTGUI_WIDGET(home_view)) = RTGUI_RGB(206, 231, 255); rtgui_dc_draw_hline(dc, 14, 14 + (tinfo.position * 212) / tinfo.duration, 75); if ((player_mode == PLAYER_PLAY_RADIO) && ((tinfo.position * 212 + 14)/tinfo.duration) < 226) { tinfo.position = net_buf_get_usage(); RTGUI_WIDGET_FOREGROUND(RTGUI_WIDGET(home_view)) = RTGUI_RGB(82, 199, 16); rtgui_dc_draw_hline(dc, 14 + (tinfo.position * 212) / tinfo.duration, 226, 75); } RTGUI_WIDGET_FOREGROUND(RTGUI_WIDGET(home_view)) = saved; if (player_mode == PLAYER_PLAY_FILE) { rtgui_color_t saved; rtgui_rect_t rect; char line[32]; play_time++; rt_snprintf(line, sizeof(line), "%3d:%02d", play_time / 60, play_time % 60); rect.x1 = 172; rect.y1 = 48; rect.x2 = 220; rect.y2 = rect.y1 + 16; saved = RTGUI_DC_BC(dc); RTGUI_DC_BC(dc) = RTGUI_RGB(0, 125, 198); rtgui_dc_fill_rect(dc, &rect); rtgui_dc_draw_text(dc, line, &rect); RTGUI_DC_BC(dc) = saved; } rtgui_dc_end_drawing(dc); }
rt_bool_t rtgui_plot_ondraw(struct rtgui_plot *plot, struct rtgui_event *event) { struct rtgui_dc *dc; struct rtgui_rect rect; dc = rtgui_dc_begin_drawing(RTGUI_WIDGET(plot)); if (dc == RT_NULL) return RT_FALSE; rtgui_widget_get_rect(RTGUI_WIDGET(plot), &rect); rtgui_dc_fill_rect(dc, &rect); _rtgui_plot_draw_curve(plot, event); rtgui_dc_end_drawing(dc); return RT_FALSE; }
void rtgui_theme_draw_label(rtgui_label_t* label) { /* draw label */ struct rtgui_dc* dc; struct rtgui_rect rect; /* begin drawing */ dc = rtgui_dc_begin_drawing(RTGUI_WIDGET(label)); if (dc == RT_NULL) return; rtgui_widget_get_rect(RTGUI_WIDGET(label), &rect); rtgui_dc_fill_rect(dc, &rect); /* default left and center draw */ rtgui_dc_draw_text(dc, rtgui_label_get_text(label), &rect); /* end drawing */ rtgui_dc_end_drawing(dc); }
void drawing_update_state_info(struct rtgui_widget* widget) { char* line; struct rtgui_dc* dc; struct rtgui_rect rect; line = rtgui_malloc(256); if (line == RT_NULL) return ; dc = rtgui_dc_begin_drawing(widget); if (dc == RT_NULL) { rt_free(line); return; } rtgui_widget_get_rect(widget, &rect); /* fill background */ rtgui_dc_fill_rect(dc, &rect); rect.y2 = rect.y1 + 18; switch(update_radio_list_state) { case UPDATE_RAIDO_LIST_PROC: sprintf(line, "正在更新电台列表......"); break ; case UPDATE_RADIO_LIST_CONNECT_FAILED: sprintf(line, "更新电台列表失败,请返回"); break; case UPDATE_RADIO_LIST_SUCCEED: sprintf(line, "更新电台列表成功,请返回"); break; } rtgui_dc_draw_text(dc, line, &rect); rtgui_dc_end_drawing(dc); rtgui_free(line); }
static void snake_fill_lattice(struct rtgui_dc *dc, rt_uint32_t x, rt_uint32_t y, rtgui_color_t color) { struct rtgui_rect rect; // coordinate conversion y = (lattice_size_y - 1) - y; RTGUI_DC_BC(dc) = color; rect.x1 = lattice_rect.x1 + (LATTICE_SIZE * x); rect.x2 = rect.x1 + LATTICE_SIZE; rect.x1 += 2; rect.y1 = lattice_rect.y1 + (LATTICE_SIZE * y); rect.y2 = rect.y1 + LATTICE_SIZE; rect.y1 += 2; rtgui_dc_fill_rect(dc, &rect); }
static void rtgui_terminal_ondraw(rtgui_terminal_t *tma) { rtgui_dc_t* dc; rtgui_rect_t rect; char* str; rt_ubase_t i, item_height; item_height = FONT_H(RTGUI_WIDGET_FONT(tma)); dc = rtgui_dc_begin_drawing(tma); if(dc == RT_NULL) return ; /* get widget rect */ rtgui_widget_get_rect(tma, &rect); rtgui_rect_inflate(&rect,-RTGUI_WIDGET_BORDER_SIZE(tma)); rtgui_dc_fill_rect(dc,&rect); rtgui_rect_inflate(&rect,RTGUI_WIDGET_BORDER_SIZE(tma)); /* draw border */ rtgui_dc_draw_border(dc,&rect,RTGUI_WIDGET_BORDER_STYLE(tma)); rect.x1 += RTGUI_MARGIN+RTGUI_WIDGET_BORDER_SIZE(tma); rect.x2 -= RTGUI_MARGIN; rect.y1 += RTGUI_MARGIN; rect.y2 = rect.y1+item_height; for(i = tma->now_item; (i < tma->now_item + tma->item_per_page) && (i < tma->item_count); i++) { str = (char*)rtgui_terminal_getline(tma, i); rtgui_dc_draw_text(dc, str, &rect); rect.y1 += item_height; rect.y2 = rect.y1+item_height; } rtgui_dc_end_drawing(dc); }