/* 创建用于演示button控件的视图 */ rtgui_view_t* demo_gui_button(rtgui_view_t* parent_view) { rtgui_view_t* view; rtgui_button_t* button; rtgui_font_t* font; /* 先创建一个演示用的视图 */ view = demo_view_create(parent_view, "Button View"); /* 创建一个button控件 */ button = rtgui_button_create(view, "Red", 5, 40, 100, 25); /* 设置label控件的前景色为红色 */ RTGUI_WIDGET_FOREGROUND(button) = red; button = rtgui_button_create(view, "Blue", 5, 70, 100, 25); RTGUI_WIDGET_FOREGROUND(button) = blue; button = rtgui_button_create(view, "12 font", 5, 100, 100, 25); /* 设置字体为12点阵的asc字体 */ font = rtgui_font_refer("asc", 12); RTGUI_WIDGET_FONT(button) = font; button = rtgui_button_create(view, "16 font", 5, 130, 100, 25); /* 设置字体为16点阵的asc字体 */ font = rtgui_font_refer("asc", 16); RTGUI_WIDGET_FONT(button) = font; return view; }
/* 创建用于演示checkbox控件的视图 */ rtgui_view_t* demo_gui_checkbox(rtgui_view_t* parent_view) { rtgui_view_t* view; rtgui_checkbox_t* checkbox; rtgui_font_t* font; /* 先创建一个演示用的视图 */ view = demo_view_create(parent_view, "CheckBox View"); /* 创建一个checkbox控件 */ checkbox = rtgui_checkbox_create(view, "Red", RT_TRUE, 5, 40); /* 设置前景色为红色 */ RTGUI_WIDGET_FOREGROUND(checkbox) = red; checkbox = rtgui_checkbox_create(view, "Blue", RT_TRUE, 5, 60); RTGUI_WIDGET_FOREGROUND(checkbox) = blue; checkbox = rtgui_checkbox_create(view, "12 font", RT_TRUE, 5, 80); font = rtgui_font_refer("asc", 12); RTGUI_WIDGET_FONT(checkbox) = font; checkbox = rtgui_checkbox_create(view, "16 font", RT_TRUE, 5, 100); font = rtgui_font_refer("asc", 16); RTGUI_WIDGET_FONT(checkbox) = font; return view; }
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); }
static void _rtgui_textbox_constructor(rtgui_textbox_t *box) { rtgui_rect_t rect; RTGUI_WIDGET_FLAG(RTGUI_WIDGET(box)) |= RTGUI_WIDGET_FLAG_FOCUSABLE; rtgui_object_set_event_handler(RTGUI_OBJECT(box), rtgui_textbox_event_handler); rtgui_widget_set_onfocus(RTGUI_WIDGET(box), rtgui_textbox_onfocus); rtgui_widget_set_onunfocus(RTGUI_WIDGET(box), rtgui_textbox_onunfocus); #ifndef RTGUI_USING_SMALL_SIZE rtgui_widget_set_onkey(RTGUI_WIDGET(box), rtgui_textbox_onkey); #endif RTGUI_WIDGET_FOREGROUND(box) = black; RTGUI_WIDGET_BACKGROUND(box) = white; /* set default text align */ RTGUI_WIDGET_TEXTALIGN(box) = RTGUI_ALIGN_CENTER_VERTICAL; /* set proper of control */ box->caret_timer = RT_NULL; box->caret = RT_NULL; box->line = box->line_begin = box->position = 0; box->flag = RTGUI_TEXTBOX_SINGLE; /* allocate default line buffer */ box->text = RT_NULL; rtgui_textbox_set_mask_char(box, '*'); rtgui_font_get_metrics(RTGUI_WIDGET_FONT(box), "H", &rect); box->font_width = rtgui_rect_width(rect); box->on_enter = RT_NULL; box->dis_length = 0; box->first_pos = 0; }
static void info_entry(void* parameter) { rt_mq_t mq; struct rtgui_view* view; struct rtgui_workbench* workbench; mq = rt_mq_create("qInfo", 256, 4, RT_IPC_FLAG_FIFO); rtgui_thread_register(rt_thread_self(), mq); workbench = rtgui_workbench_create("info", "workbench"); if(workbench == RT_NULL) return; view = rtgui_view_create("view"); RTGUI_WIDGET_BACKGROUND(RTGUI_WIDGET(view)) = white; RTGUI_WIDGET_FOREGROUND(RTGUI_WIDGET(view)) = black; rtgui_widget_set_event_handler(RTGUI_WIDGET(view), view_event_handler); rtgui_workbench_add_view(workbench, view); /* this view can be focused */ RTGUI_WIDGET(view)->flag |= RTGUI_WIDGET_FLAG_FOCUSABLE; /* set widget focus */ rtgui_widget_focus(RTGUI_WIDGET(view)); rtgui_view_show(view, RT_FALSE); rtgui_workbench_event_loop(workbench); rtgui_thread_deregister(rt_thread_self()); rt_mq_delete(mq); }
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); }
/* 创建用于演示label控件的视图 */ rtgui_view_t* demo_gui_label(rtgui_view_t* parent_view) { rtgui_view_t* view; rtgui_label_t* label; rtgui_font_t* font; /* 先创建一个演示用的视图 */ view = demo_view_create(parent_view, "Label View"); /* 创建一个label控件 */ label = rtgui_label_create(view, "Red Left", 10, 40, 200, 20); /* 设置label控件上的文本对齐方式为:左对齐 */ RTGUI_WIDGET_TEXTALIGN(label) = RTGUI_ALIGN_LEFT|RTGUI_ALIGN_CENTER_VERTICAL; /* 设置label控件的前景色为红色 */ RTGUI_WIDGET_FOREGROUND(label) = red; RTGUI_WIDGET_BACKGROUND(label) = white; label = rtgui_label_create(view, "Blue Right", 10, 65, 200, 20); RTGUI_WIDGET_TEXTALIGN(label) = RTGUI_ALIGN_RIGHT|RTGUI_ALIGN_CENTER_VERTICAL; RTGUI_WIDGET_FOREGROUND(label) = blue; RTGUI_WIDGET_BACKGROUND(label) = white; label = rtgui_label_create(view, "Green Center", 10, 90, 200, 20); RTGUI_WIDGET_TEXTALIGN(label) = RTGUI_ALIGN_CENTER_HORIZONTAL|RTGUI_ALIGN_CENTER_VERTICAL; RTGUI_WIDGET_FOREGROUND(label) = green; RTGUI_WIDGET_BACKGROUND(label) = white; label = rtgui_label_create(view, "12 font",10, 115, 200, 20); /* 设置字体为12点阵的asc字体 */ font = rtgui_font_refer("asc", 12); RTGUI_WIDGET_FONT(label) = font; RTGUI_WIDGET_BACKGROUND(label) = white; label = rtgui_label_create(view, "16 font", 10, 140, 200, 20); font = rtgui_font_refer("asc", 16); RTGUI_WIDGET_FONT(RTGUI_WIDGET(label)) = font; RTGUI_WIDGET_BACKGROUND(label) = white; return view; }
static void player_entry(void* parameter) { rt_mq_t mq; rtgui_rect_t rect; mq = rt_mq_create("ply_ui", 256, 4, RT_IPC_FLAG_FIFO); rtgui_thread_register(rt_thread_self(), mq); /* create information timer */ info_timer = rtgui_timer_create(RT_TICK_PER_SECOND, RT_TIMER_FLAG_PERIODIC, info_timer_timeout, RT_NULL); workbench = rtgui_workbench_create("main", "workbench"); if (workbench == RT_NULL) return; rtgui_widget_set_event_handler(RTGUI_WIDGET(workbench), player_workbench_event_handler); /* add home view */ home_view = rtgui_view_create("Home"); rtgui_widget_set_event_handler(RTGUI_WIDGET(home_view), home_view_event_handler); rtgui_workbench_add_view(workbench, home_view); /* this view can be focused */ RTGUI_WIDGET(home_view)->flag |= RTGUI_WIDGET_FLAG_FOCUSABLE; /* set widget focus */ rtgui_widget_focus(RTGUI_WIDGET(home_view)); rtgui_widget_get_rect(RTGUI_WIDGET(home_view), &rect); rect.x1 += 6; rect.y1 += 150 + 25; rect.x2 = rect.x1 + 228; rect.y2 = rect.y1 + 145; music_listbox = rtgui_listbox_create(RT_NULL, 0, &rect); /* none focusable widget */ RTGUI_WIDGET(music_listbox)->flag &= ~RTGUI_WIDGET_FLAG_FOCUSABLE; RTGUI_WIDGET_FOREGROUND(RTGUI_WIDGET(music_listbox)) = black; RTGUI_WIDGET_BACKGROUND(RTGUI_WIDGET(music_listbox)) = white; rtgui_container_add_child(RTGUI_CONTAINER(home_view), RTGUI_WIDGET(music_listbox)); rtgui_listbox_set_onitem(music_listbox, player_play_list_onitem); rtgui_view_show(home_view, RT_FALSE); /* 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_workbench_event_loop(workbench); rtgui_thread_deregister(rt_thread_self()); rt_mq_delete(mq); }
rtgui_digtube_t *rtgui_digtube_create( struct rtgui_digitfont * digitfont, int count, void * value, int style) { struct rtgui_digtube *digtube; rtgui_rect_t rect; RT_ASSERT(count <= 7 && count > 0) digtube = (struct rtgui_digtube *) rtgui_widget_create(RTGUI_DIGTUBE_TYPE); if (digtube == RT_NULL) return RT_NULL; /* set field */ if (digitfont == RT_NULL) digitfont = &digitfont_40; rt_memcpy(& digtube->digitfont, digitfont, sizeof(struct rtgui_digitfont)); #ifndef RTGUI_DIGTUBE_USE_CONST_FONT if (digtube->digitfont.data == RT_NULL) rtgui_digitfont_create(& digtube->digitfont); #endif /* set default rect */ rtgui_get_digfont_metrics(&digtube->digitfont, &rect); digtube->digit_width = rect.x2; digtube->digit_hight = rect.y2; digtube->tube_count = count; digtube->digit_space = RTGUI_DIGTUBE_DEFAULT_SPACE; rect.x2 = (rect.x2 + digtube->digit_space) * count - digtube->digit_space; rect.y2 = rect.y2; RTGUI_WIDGET_BACKGROUND(digtube) = rtgui_theme_default_bc(); RTGUI_WIDGET_FOREGROUND(digtube) = RTGUI_DIGTUBE_DEFAULT_FC; rtgui_widget_set_rect(RTGUI_WIDGET(digtube), &rect); /* set display value */ digtube->digit_bc = RTGUI_DIGTUBE_DEFAULT_DIGIT_BC; digtube->value = value; digtube->tube_style = style; return digtube; }
static void _rtgui_button_constructor(rtgui_button_t *button) { /* init widget and set event handler */ RTGUI_WIDGET(button)->flag |= RTGUI_WIDGET_FLAG_FOCUSABLE; rtgui_widget_set_event_handler(RTGUI_WIDGET(button), rtgui_button_event_handler); /* un-press button */ button->flag = 0; /* set flag and on_button event handler */ button->pressed_image = RT_NULL; button->unpressed_image = RT_NULL; button->on_button = RT_NULL; /* set gc */ RTGUI_WIDGET_FOREGROUND(RTGUI_WIDGET(button)) = default_foreground; RTGUI_WIDGET_BACKGROUND(RTGUI_WIDGET(button)) = RTGUI_RGB(212, 208, 200); RTGUI_WIDGET_TEXTALIGN(RTGUI_WIDGET(button)) = RTGUI_ALIGN_CENTER_HORIZONTAL | RTGUI_ALIGN_CENTER_VERTICAL; }
/* widget drawing */ void rtgui_theme_draw_button(rtgui_button_t* btn) { /* draw button */ struct rtgui_dc* dc; struct rtgui_rect rect; rtgui_color_t bc, fc; /* begin drawing */ dc = rtgui_dc_begin_drawing(RTGUI_WIDGET(btn)); if (dc == RT_NULL) return; /* get widget rect */ rtgui_widget_get_rect(RTGUI_WIDGET(btn), &rect); /* get foreground color */ bc = RTGUI_WIDGET_BACKGROUND(RTGUI_WIDGET(btn)); fc = RTGUI_WIDGET_FOREGROUND(RTGUI_WIDGET(btn)); if (btn->flag & RTGUI_BUTTON_TYPE_PUSH && btn->flag & RTGUI_BUTTON_FLAG_PRESS) { /* fill button rect with background color */ rtgui_dc_fill_rect(dc, &rect); /* draw border */ RTGUI_WIDGET_FOREGROUND(RTGUI_WIDGET(btn)) = RTGUI_RGB(64, 64, 64); rtgui_dc_draw_hline(dc, rect.x1, rect.x2, rect.y1); rtgui_dc_draw_vline(dc, rect.x1, rect.y1, rect.y2); RTGUI_WIDGET_FOREGROUND(RTGUI_WIDGET(btn)) = RTGUI_RGB(128, 128, 128); rtgui_dc_draw_hline(dc, rect.x1, rect.x2 - 1, rect.y1 + 1); rtgui_dc_draw_vline(dc, rect.x1 + 1, rect.y1 + 1, rect.y2 - 2); RTGUI_WIDGET_FOREGROUND(RTGUI_WIDGET(btn)) = RTGUI_RGB(255, 255, 255); rtgui_dc_draw_hline(dc, rect.x1, rect.x2 + 1, rect.y2 - 1); rtgui_dc_draw_vline(dc, rect.x2 - 1, rect.y1, rect.y2); if (btn->pressed_image != RT_NULL) { rtgui_rect_t image_rect; image_rect.x1 = 0; image_rect.y1 = 0; image_rect.x2 = btn->unpressed_image->w; image_rect.y2 = btn->unpressed_image->h; rtgui_rect_moveto_align(&rect, &image_rect, RTGUI_ALIGN_CENTER_HORIZONTAL | RTGUI_ALIGN_CENTER_VERTICAL); rtgui_image_blit(btn->pressed_image, dc, &image_rect); } } else if (btn->flag & RTGUI_BUTTON_FLAG_PRESS) { if (btn->pressed_image != RT_NULL) { rtgui_rect_t image_rect; image_rect.x1 = 0; image_rect.y1 = 0; image_rect.x2 = btn->unpressed_image->w; image_rect.y2 = btn->unpressed_image->h; rtgui_rect_moveto_align(&rect, &image_rect, RTGUI_ALIGN_CENTER_HORIZONTAL | RTGUI_ALIGN_CENTER_VERTICAL); rtgui_image_blit(btn->pressed_image, dc, &image_rect); } else { /* fill button rect with background color */ RTGUI_WIDGET_BACKGROUND(RTGUI_WIDGET(btn)) = RTGUI_RGB(0xff, 0xff, 0xff); rtgui_dc_fill_rect(dc, &rect); /* draw border */ RTGUI_WIDGET(btn)->gc.foreground = RTGUI_RGB(0, 0, 0); rtgui_dc_draw_rect(dc, &rect); RTGUI_WIDGET(btn)->gc.foreground = RTGUI_RGB(128, 128, 128); rect.x1 += 1; rect.y1 += 1; rect.x2 -= 1; rect.y2 -= 1; rtgui_dc_draw_rect(dc, &rect); } } else { if (btn->unpressed_image != RT_NULL) { rtgui_rect_t image_rect; image_rect.x1 = 0; image_rect.y1 = 0; image_rect.x2 = btn->unpressed_image->w; image_rect.y2 = btn->unpressed_image->h; rtgui_rect_moveto_align(&rect, &image_rect, RTGUI_ALIGN_CENTER_HORIZONTAL | RTGUI_ALIGN_CENTER_VERTICAL); rtgui_image_blit(btn->unpressed_image, dc, &image_rect); } else { /* fill button rect with background color */ rtgui_dc_fill_rect(dc, &rect); /* draw border */ RTGUI_WIDGET(btn)->gc.foreground = RTGUI_RGB(255, 255, 255); rtgui_dc_draw_hline(dc, rect.x1, rect.x2, rect.y1); rtgui_dc_draw_vline(dc, rect.x1, rect.y1, rect.y2); RTGUI_WIDGET(btn)->gc.foreground = RTGUI_RGB(0, 0, 0); rtgui_dc_draw_hline(dc, rect.x1, rect.x2 + 1, rect.y2); rtgui_dc_draw_vline(dc, rect.x2, rect.y1, rect.y2); RTGUI_WIDGET(btn)->gc.foreground = RTGUI_RGB(128, 128, 128); rtgui_dc_draw_hline(dc, rect.x1 + 1, rect.x2, rect.y2 - 1); rtgui_dc_draw_vline(dc, rect.x2 - 1, rect.y1 + 1, rect.y2 - 1); } } if (RTGUI_WIDGET_IS_FOCUSED(RTGUI_WIDGET(btn))) { /* re-set foreground and get default rect */ rtgui_widget_get_rect(RTGUI_WIDGET(btn), &rect); rtgui_rect_inflate(&rect, -2); RTGUI_WIDGET_FOREGROUND(RTGUI_WIDGET(btn)) = black; rtgui_dc_draw_focus_rect(dc, &rect); } /* set forecolor */ RTGUI_WIDGET_BACKGROUND(RTGUI_WIDGET(btn)) = bc; RTGUI_WIDGET_FOREGROUND(RTGUI_WIDGET(btn)) = fc; if (btn->pressed_image == RT_NULL) { /* re-set foreground and get default rect */ rtgui_widget_get_rect(RTGUI_WIDGET(btn), &rect); /* remove border */ rtgui_rect_inflate(&rect, -2); /* draw text */ rtgui_dc_draw_text(dc, rtgui_label_get_text(RTGUI_LABEL(btn)), &rect); } /* end drawing */ rtgui_dc_end_drawing(dc); }
rt_bool_t calibration_event_handler(struct rtgui_widget* widget, struct rtgui_event* event) { switch (event->type) { case RTGUI_EVENT_PAINT: { struct rtgui_dc* dc; struct rtgui_rect rect; dc = rtgui_dc_begin_drawing(widget); if (dc == RT_NULL) break; /* get rect information */ rtgui_widget_get_rect(widget, &rect); /* clear whole window */ RTGUI_WIDGET_BACKGROUND(widget) = white; rtgui_dc_fill_rect(dc, &rect); /* reset color */ RTGUI_WIDGET_BACKGROUND(widget) = green; RTGUI_WIDGET_FOREGROUND(widget) = black; switch (calibration_ptr->step) { case CALIBRATION_STEP_LEFTTOP: rtgui_dc_draw_hline(dc, 0, 2 * CALIBRATION_WIDTH, CALIBRATION_HEIGHT); rtgui_dc_draw_vline(dc, CALIBRATION_WIDTH, 0, 2 * CALIBRATION_HEIGHT); RTGUI_WIDGET_FOREGROUND(widget) = red; rtgui_dc_fill_circle(dc, CALIBRATION_WIDTH, CALIBRATION_HEIGHT, 4); break; case CALIBRATION_STEP_RIGHTTOP: rtgui_dc_draw_hline(dc, calibration_ptr->width - 2 * CALIBRATION_WIDTH, calibration_ptr->width, CALIBRATION_HEIGHT); rtgui_dc_draw_vline(dc, calibration_ptr->width - CALIBRATION_WIDTH, 0, 2 * CALIBRATION_HEIGHT); RTGUI_WIDGET_FOREGROUND(widget) = red; rtgui_dc_fill_circle(dc, calibration_ptr->width - CALIBRATION_WIDTH, CALIBRATION_HEIGHT, 4); break; case CALIBRATION_STEP_LEFTBOTTOM: rtgui_dc_draw_hline(dc, 0, 2 * CALIBRATION_WIDTH, calibration_ptr->height - CALIBRATION_HEIGHT); rtgui_dc_draw_vline(dc, CALIBRATION_WIDTH, calibration_ptr->height - 2 * CALIBRATION_HEIGHT, calibration_ptr->height); RTGUI_WIDGET_FOREGROUND(widget) = red; rtgui_dc_fill_circle(dc, CALIBRATION_WIDTH, calibration_ptr->height - CALIBRATION_HEIGHT, 4); break; case CALIBRATION_STEP_RIGHTBOTTOM: rtgui_dc_draw_hline(dc, calibration_ptr->width - 2 * CALIBRATION_WIDTH, calibration_ptr->width, calibration_ptr->height - CALIBRATION_HEIGHT); rtgui_dc_draw_vline(dc, calibration_ptr->width - CALIBRATION_WIDTH, calibration_ptr->height - 2 * CALIBRATION_HEIGHT, calibration_ptr->height); RTGUI_WIDGET_FOREGROUND(widget) = red; rtgui_dc_fill_circle(dc, calibration_ptr->width - CALIBRATION_WIDTH, calibration_ptr->height - CALIBRATION_HEIGHT, 4); break; case CALIBRATION_STEP_CENTER: rtgui_dc_draw_hline(dc, calibration_ptr->width/2 - CALIBRATION_WIDTH, calibration_ptr->width/2 + CALIBRATION_WIDTH, calibration_ptr->height/2); rtgui_dc_draw_vline(dc, calibration_ptr->width/2, calibration_ptr->height/2 - CALIBRATION_HEIGHT, calibration_ptr->height/2 + CALIBRATION_HEIGHT); RTGUI_WIDGET_FOREGROUND(widget) = red; rtgui_dc_fill_circle(dc, calibration_ptr->width/2, calibration_ptr->height/2, 4); break; } rtgui_dc_end_drawing(dc); } break; case RTGUI_EVENT_COMMAND: { struct rtgui_event_command* ecmd = (struct rtgui_event_command*)event; switch (ecmd->command_id) { case TOUCH_WIN_UPDATE: rtgui_widget_update(widget); break; case TOUCH_WIN_CLOSE: rtgui_win_close(RTGUI_WIN(widget)); break; } } return RT_TRUE; default: rtgui_win_event_handler(widget, event); } return RT_FALSE; }
/* 创建用于演示checkbox控件的视图 */ rtgui_view_t* demo_view_checkbox(rtgui_workbench_t* workbench) { rtgui_rect_t rect; rtgui_view_t* view; rtgui_checkbox_t* checkbox; rtgui_font_t* font; /* 先创建一个演示用的视图 */ view = demo_view(workbench, "CheckBox View"); /* 获得视图的位置信息 */ demo_view_get_rect(view, &rect); rect.x1 += 5; rect.x2 = rect.x1 + 100; rect.y1 += 5; rect.y2 = rect.y1 + 20; /* 创建一个checkbox控件 */ checkbox = rtgui_checkbox_create("Red",RT_TRUE); /* 设置前景色为红色 */ RTGUI_WIDGET_FOREGROUND(RTGUI_WIDGET(checkbox)) = red; /* 设置checkbox的位置 */ rtgui_widget_set_rect(RTGUI_WIDGET(checkbox), &rect); /* view是一个container控件,调用add_child方法添加这个checkbox控件 */ rtgui_container_add_child(RTGUI_CONTAINER(view), RTGUI_WIDGET(checkbox)); /* 获得视图的位置信息 */ demo_view_get_rect(view, &rect); rect.x1 += 5; rect.x2 = rect.x1 + 100; rect.y1 += 5 + 25; rect.y2 = rect.y1 + 20; /* 创建一个checkbox控件 */ checkbox = rtgui_checkbox_create("Blue",RT_TRUE); /* 设置前景色为蓝色 */ RTGUI_WIDGET_FOREGROUND(RTGUI_WIDGET(checkbox)) = blue; /* 设置checkbox的位置 */ rtgui_widget_set_rect(RTGUI_WIDGET(checkbox), &rect); /* view是一个container控件,调用add_child方法添加这个checkbox控件 */ rtgui_container_add_child(RTGUI_CONTAINER(view), RTGUI_WIDGET(checkbox)); /* 获得视图的位置信息 */ demo_view_get_rect(view, &rect); rect.x1 += 5; rect.x2 = rect.x1 + 100; rect.y1 += 5 + 25 + 25; rect.y2 = rect.y1 + 20; /* 创建一个checkbox控件 */ checkbox = rtgui_checkbox_create("12 font",RT_TRUE); /* 设置字体为12点阵 */ font = rtgui_font_refer("asc", 12); RTGUI_WIDGET_FONT(RTGUI_WIDGET(checkbox)) = font; /* 设置checkbox的位置 */ rtgui_widget_set_rect(RTGUI_WIDGET(checkbox), &rect); /* view是一个container控件,调用add_child方法添加这个checkbox控件 */ rtgui_container_add_child(RTGUI_CONTAINER(view), RTGUI_WIDGET(checkbox)); /* 获得视图的位置信息 */ demo_view_get_rect(view, &rect); rect.x1 += 5; rect.x2 = rect.x1 + 100; rect.y1 += 5 + 25 + 25 + 25; rect.y2 = rect.y1 + 20; /* 创建一个checkbox控件 */ checkbox = rtgui_checkbox_create("16 font",RT_TRUE); /* 设置字体为16点阵 */ font = rtgui_font_refer("asc", 16); RTGUI_WIDGET_FONT(RTGUI_WIDGET(checkbox)) = font; /* 设置checkbox的位置 */ rtgui_widget_set_rect(RTGUI_WIDGET(checkbox), &rect); /* view是一个container控件,调用add_child方法添加这个checkbox控件 */ rtgui_container_add_child(RTGUI_CONTAINER(view), RTGUI_WIDGET(checkbox)); return view; }
/* * 构建应用视图 */ int app_view_structure(struct rtgui_workbench *workbench, struct rtgui_view *view) { int ret = SUCC; rtgui_rect_t rect, body_rect; rtgui_label_t* label; char str[48]; //rtgui_radiobox_t *radiobox; //rtgui_button_t* button; struct tm *ptime; #if 1==DISPLAY_OVERLOAD_INFO rtgui_label_t *rx_overload_label; #endif app_view_get_can_use_rect(view, &rect); zvd_gui_debug(("fun:%s(), line:%d, (%d,%d) (%d,%d)!\n", __FUNCTION__, __LINE__, rect.x1, rect.y1, rect.x2, rect.y2)); body_rect.x1 = 0; body_rect.y1 = 0; body_rect.x2 = rect.x2; body_rect.y2 = TITLE_PANEL_HEIGHT; label = rtgui_label_create(DEVICE_NAME); if (NULL != label) { RTGUI_WIDGET_TEXTALIGN(RTGUI_WIDGET(label)) = RTGUI_ALIGN_CENTER_HORIZONTAL | RTGUI_ALIGN_CENTER_VERTICAL; RTGUI_WIDGET_FOREGROUND(RTGUI_WIDGET(label)) = blue; rtgui_widget_set_rect(RTGUI_WIDGET(label), &body_rect); /* view是一个container控件,调用add_child方法添加这个label控件 */ rtgui_container_add_child(RTGUI_CONTAINER(view), RTGUI_WIDGET(label)); } else { printf_syn("creat title label fail\n"); } body_rect.x1 = 0; body_rect.y1 = TITLE_PANEL_HEIGHT; body_rect.x2 = rect.x2; body_rect.y2 = rect.y2; zvd_gui_debug(("fun:%s(), line:%d, (%d,%d) (%d,%d)!\n", __FUNCTION__, __LINE__, body_rect.x1, body_rect.y1, body_rect.x2, body_rect.y2)); zvd_notebook = rtgui_notebook_create(&body_rect, RTGUI_NOTEBOOK_TOP); rtgui_container_add_child(RTGUI_CONTAINER(view), RTGUI_WIDGET(zvd_notebook)); re_form = rtgui_form_create(re_form_head, RE_FORM_ROWS, RE_FORM_COLS, &body_rect); rtgui_notebook_add(zvd_notebook, "接收端", RTGUI_WIDGET(re_form)); #if 1 set_form_px_col(re_form); i2str(str, avg_val[AVI_RE_PA]); rtgui_form_set_item(re_form, str, RE_PA_AVG_VALUE_ROW, RE_PA_AVG_VALUE_COL, 0); rtgui_form_set_item(re_form, print_info_str[PIS_ID_ZHENGCHANG], RE_PA_OVER_RANGE_ROW, RE_PA_OVER_RANGE_COL, 0); i2str(str, avg_val[AVI_RE_PB]); rtgui_form_set_item(re_form, str, RE_PB_AVG_VALUE_ROW, RE_PB_AVG_VALUE_COL, 0); rtgui_form_set_item(re_form, print_info_str[PIS_ID_ZHENGCHANG], RE_PB_OVER_RANGE_ROW, RE_PB_OVER_RANGE_COL, 0); i2str(str, avg_val[AVI_RE_PC]); rtgui_form_set_item(re_form, str, RE_PC_AVG_VALUE_ROW, RE_PC_AVG_VALUE_COL, 0); rtgui_form_set_item(re_form, print_info_str[PIS_ID_ZHENGCHANG], RE_PC_OVER_RANGE_ROW, RE_PC_OVER_RANGE_COL, 0); #endif se_form = rtgui_form_create(se_form_head, SE_FORM_ROWS, SE_FORM_COLS, &body_rect); rtgui_notebook_add(zvd_notebook, "发射端", RTGUI_WIDGET(se_form)); #if 1 set_form_px_col(se_form); rtgui_form_set_item(se_form, print_info_str[PIS_ID_ZHENGCHANG], SE_PA_OVER_RANGE_ROW, SE_PA_OVER_RANGE_COL, 0); rtgui_form_set_item(se_form, print_info_str[PIS_ID_FOU], SE_PA_POWER_DOWN_ROW, SE_PA_POWER_DOWN_COL, 0); rtgui_form_set_item(se_form, print_info_str[PIS_ID_ZHENGCHANG], SE_PB_OVER_RANGE_ROW, SE_PB_OVER_RANGE_COL, 0); rtgui_form_set_item(se_form, print_info_str[PIS_ID_FOU], SE_PB_POWER_DOWN_ROW, SE_PB_POWER_DOWN_COL, 0); rtgui_form_set_item(se_form, print_info_str[PIS_ID_ZHENGCHANG], SE_PC_OVER_RANGE_ROW, SE_PC_OVER_RANGE_COL, 0); rtgui_form_set_item(se_form, print_info_str[PIS_ID_FOU], SE_PC_POWER_DOWN_ROW, SE_PC_POWER_DOWN_COL, 0); #endif sys_form = rtgui_form_create(sys_form_head, SYS_FORM_ROWS, SYS_FORM_COLS, &body_rect); rtgui_notebook_add(zvd_notebook, "系统", RTGUI_WIDGET(sys_form)); #if 1 rtgui_form_set_item(sys_form, "接收端", 1, 0, 0); i2str(str, sys_temper[STI_RE_CPU_T]); rtgui_form_set_item(sys_form, str, RE_RE_CPU_TEMP_ROW, RE_RE_CPU_TEMP_COL, 0); i2str(str, sys_temper[STI_RE_CTB_T]); rtgui_form_set_item(sys_form, str, RE_RE_BOX_TEMP_ROW, RE_RE_BOX_TEMP_COL, 0); convert_ver2str(re_version, str); rtgui_form_set_item(sys_form, str, RE_RE_SOFT_VER_ROW, RE_RE_SOFT_VER_COL, 0); rtgui_form_set_item(sys_form, "发射端", 2, 0, 0); i2str(str, sys_temper[STI_SE_CPU_T]); rtgui_form_set_item(sys_form, str, RE_SE_CPU_TEMP_ROW, RE_SE_CPU_TEMP_COL, 0); i2str(str, sys_temper[STI_SE_CTB_T]); rtgui_form_set_item(sys_form, str, RE_SE_BOX_TEMP_ROW, RE_SE_BOX_TEMP_COL, 0); convert_ver2str(se_version, str); rtgui_form_set_item(sys_form, str, RE_SE_SOFT_VER_ROW, RE_SE_SOFT_VER_COL, 0); creat_devsn(str, sizeof(str), 0); rtgui_form_set_row(sys_form, str, TE_SN_ROW); creat_devsn(str, sizeof(str), 1); rtgui_form_set_row(sys_form, str, RE_SN_ROW); #endif other_form = rtgui_form_create(other_form_head, OTHER_FORM_ROWS, OTHER_FORM_COLS, &body_rect); rtgui_notebook_add(zvd_notebook, "掉电", RTGUI_WIDGET(other_form)); #if 1 rtgui_form_set_item(other_form, "次数", 1, 0, 0); rtgui_form_set_item(other_form, "n", 2, 0, 0); rtgui_form_set_item(other_form, "n-1", 3, 0, 0); rtgui_form_set_item(other_form, "n-2", 4, 0, 0); update_tx_poweroff_info_of_otherform(); update_rx_poweroff_info_of_otherform(); #endif body_rect.x1 = FRAME_GAP; body_rect.y1 = body_rect.y2 + WIDGET_ROW_GAP; body_rect.x2 = FRAME_GAP + 8 * rt_strlen(RE_IF_SWITCH2CABLE_STR); body_rect.y2 = body_rect.y1 + 16; zvd_gui_debug(("fun:%s(), line:%d, (%d,%d) (%d,%d)!\n", __FUNCTION__, __LINE__, body_rect.x1, body_rect.y1, body_rect.x2, body_rect.y2)); switch_cable_label = rtgui_label_create(RE_IF_SWITCH2CABLE_STR); if (NULL != switch_cable_label) { RTGUI_WIDGET_TEXTALIGN(RTGUI_WIDGET(switch_cable_label)) = RTGUI_ALIGN_CENTER_VERTICAL; //RTGUI_WIDGET_FOREGROUND(RTGUI_WIDGET(switch_cable_label)) = blue; rtgui_widget_set_rect(RTGUI_WIDGET(switch_cable_label), &body_rect); /* view是一个container控件,调用add_child方法添加这个label控件 */ rtgui_container_add_child(RTGUI_CONTAINER(view), RTGUI_WIDGET(switch_cable_label)); } else { printf_syn("creat cable label fail\n"); } #if 1 body_rect.x1 = body_rect.x2 + 2; body_rect.x2 = body_rect.x1 + 16 + 8; zvd_gui_debug(("fun:%s(), line:%d, (%d,%d) (%d,%d)!\n", __FUNCTION__, __LINE__, body_rect.x1, body_rect.y1, body_rect.x2, body_rect.y2)); switch_cable_yn_textview = rtgui_textview_create(print_info_str[PIS_ID_FOU], &body_rect); if (NULL != switch_cable_yn_textview) { RTGUI_WIDGET_TEXTALIGN(RTGUI_WIDGET(switch_cable_yn_textview)) = RTGUI_ALIGN_CENTER_HORIZONTAL | RTGUI_ALIGN_CENTER_VERTICAL; //RTGUI_WIDGET_FOREGROUND(RTGUI_WIDGET(switch_cable_yn_textview)) = red; rtgui_container_add_child(RTGUI_CONTAINER(view), RTGUI_WIDGET(switch_cable_yn_textview)); } else { printf_syn("creat cable yn textview fail\n"); } #endif #if 1 body_rect.x1 = body_rect.x2 + 2 + 2*8; body_rect.x2 = body_rect.x1 + 8*rt_strlen(TE_HAD_POWEROFF_STR); zvd_gui_debug(("fun:%s(), line:%d, (%d,%d) (%d,%d)!\n", __FUNCTION__, __LINE__, body_rect.x1, body_rect.y1, body_rect.x2, body_rect.y2)); tx_poweroff_label = rtgui_label_create(TE_HAD_POWEROFF_STR); if (NULL != tx_poweroff_label) { RTGUI_WIDGET_TEXTALIGN(RTGUI_WIDGET(tx_poweroff_label)) = RTGUI_ALIGN_CENTER_VERTICAL; rtgui_widget_set_rect(RTGUI_WIDGET(tx_poweroff_label), &body_rect); rtgui_container_add_child(RTGUI_CONTAINER(view), RTGUI_WIDGET(tx_poweroff_label)); } else { printf_syn("tx poweroff label fail\n"); } body_rect.x1 = body_rect.x2 + 2; body_rect.x2 = body_rect.x1 + 16 + 8; zvd_gui_debug(("fun:%s(), line:%d, (%d,%d) (%d,%d)!\n", __FUNCTION__, __LINE__, body_rect.x1, body_rect.y1, body_rect.x2, body_rect.y2)); tx_poweroff_yn_textview = rtgui_textview_create(print_info_str[PIS_ID_FOU], &body_rect); if (NULL != tx_poweroff_yn_textview) { RTGUI_WIDGET_TEXTALIGN(RTGUI_WIDGET(tx_poweroff_yn_textview)) = RTGUI_ALIGN_CENTER_HORIZONTAL | RTGUI_ALIGN_CENTER_VERTICAL; rtgui_container_add_child(RTGUI_CONTAINER(view), RTGUI_WIDGET(tx_poweroff_yn_textview)); } else { printf_syn("creat cable yn textview fail\n"); } #endif #if 1 body_rect.x1 = FRAME_GAP; body_rect.y1 = body_rect.y2 + WIDGET_ROW_GAP; body_rect.x2 = FRAME_GAP + (8+1) * rt_strlen(RE_BUZZER_DISABLE_STR); body_rect.y2 = body_rect.y1 + 16 + 2*WIDGET_ROW_GAP; zvd_gui_debug(("fun:%s(), line:%d, (%d,%d) (%d,%d)!\n", __FUNCTION__, __LINE__, body_rect.x1, body_rect.y1, body_rect.x2, body_rect.y2)); buzzer_button = rtgui_pushbutton_create(RE_BUZZER_DISABLE_STR); if (NULL != buzzer_button) { RTGUI_WIDGET_TEXTALIGN(RTGUI_WIDGET(buzzer_button)) = RTGUI_ALIGN_CENTER_HORIZONTAL | RTGUI_ALIGN_CENTER_VERTICAL; //RTGUI_WIDGET_FOREGROUND(RTGUI_WIDGET(buzzer_button)) = blue; rtgui_widget_set_rect(RTGUI_WIDGET(buzzer_button), &body_rect); rtgui_container_add_child(RTGUI_CONTAINER(view), RTGUI_WIDGET(buzzer_button)); rtgui_button_set_onbutton(buzzer_button, buzzer_btn_onbutton); } else { printf_syn("creat buzzer pushbutton fail\n"); } body_rect.x1 = body_rect.x2 + FRAME_GAP; /* body_rect.y1 = body_rect.y1; */ /* 与前一个按钮在同一行, 所以, y1, y2保持不变 */ body_rect.x2 = body_rect.x1 + (8+1) * rt_strlen(SWITCH_TO_PT_STR);; /* body_rect.y2 = body_rect.y2; */ /* 与前一个按钮在同一行, 所以, y1, y2保持不变 */ switch2pt_button = rtgui_pushbutton_create(SWITCH_TO_PT_STR); if (NULL != switch2pt_button) { RTGUI_WIDGET_TEXTALIGN(RTGUI_WIDGET(switch2pt_button)) = RTGUI_ALIGN_CENTER_HORIZONTAL | RTGUI_ALIGN_CENTER_VERTICAL; //RTGUI_WIDGET_FOREGROUND(RTGUI_WIDGET(switch2pt_button)) = blue; rtgui_widget_set_rect(RTGUI_WIDGET(switch2pt_button), &body_rect); rtgui_container_add_child(RTGUI_CONTAINER(view), RTGUI_WIDGET(switch2pt_button)); rtgui_button_set_onbutton(switch2pt_button, switch2pt_btn_onbutton); } else { printf_syn("creat switch button fail\n"); } #if USE_OPTICX_200S_VERSION body_rect.x1 = body_rect.x2 + FRAME_GAP; /* body_rect.y1 = body_rect.y1; */ /* 与前一个按钮在同一行, 所以, y1, y2保持不变 */ body_rect.x2 = body_rect.x1 + (8) * rt_strlen(RE_CUR_CHANNEL_NO_STR) + 2; /* body_rect.y2 = body_rect.y2; */ /* 与前一个按钮在同一行, 所以, y1, y2保持不变 */ zvd_gui_debug(("fun:%s(), line:%d, (%d,%d) (%d,%d)!\n", __FUNCTION__, __LINE__, body_rect.x1, body_rect.y1, body_rect.x2, body_rect.y2)); rxe_cur_channel_label = rtgui_label_create(RE_CUR_CHANNEL_NO_STR); if (NULL != rxe_cur_channel_label) { RTGUI_WIDGET_TEXTALIGN(RTGUI_WIDGET(rxe_cur_channel_label)) = RTGUI_ALIGN_CENTER_VERTICAL; rtgui_widget_set_rect(RTGUI_WIDGET(rxe_cur_channel_label), &body_rect); rtgui_container_add_child(RTGUI_CONTAINER(view), RTGUI_WIDGET(rxe_cur_channel_label)); } else { printf_syn("rxe cru channel label fail\n"); } body_rect.x1 = body_rect.x2 + 2; body_rect.x2 = body_rect.x1 + 8 + 8; zvd_gui_debug(("fun:%s(), line:%d, (%d,%d) (%d,%d)!\n", __FUNCTION__, __LINE__, body_rect.x1, body_rect.y1, body_rect.x2, body_rect.y2)); str[0] = convert_cur_channel_to_char(); str[1] = '\0'; rxe_cur_channel_no_textview = rtgui_textview_create(str, &body_rect); if (NULL != rxe_cur_channel_no_textview) { RTGUI_WIDGET_TEXTALIGN(RTGUI_WIDGET(rxe_cur_channel_no_textview)) = RTGUI_ALIGN_CENTER_HORIZONTAL | RTGUI_ALIGN_CENTER_VERTICAL; rtgui_container_add_child(RTGUI_CONTAINER(view), RTGUI_WIDGET(rxe_cur_channel_no_textview)); } else { printf_syn("creat cable yn textview fail\n"); } #endif #endif #if 1==DISPLAY_OVERLOAD_INFO body_rect.x1 = body_rect.x2 + 2 + 7*8; body_rect.x2 = body_rect.x1 + 8*rt_strlen(RE_OVERLOAD_CNT_STR); zvd_gui_debug(("fun:%s(), line:%d, (%d,%d) (%d,%d)!\n", __FUNCTION__, __LINE__, body_rect.x1, body_rect.y1, body_rect.x2, body_rect.y2)); rx_overload_label = rtgui_label_create(RE_OVERLOAD_CNT_STR); if (NULL != rx_overload_label) { RTGUI_WIDGET_TEXTALIGN(RTGUI_WIDGET(rx_overload_label)) = RTGUI_ALIGN_CENTER_VERTICAL; rtgui_widget_set_rect(RTGUI_WIDGET(rx_overload_label), &body_rect); rtgui_container_add_child(RTGUI_CONTAINER(view), RTGUI_WIDGET(rx_overload_label)); } else { printf_syn("tx poweroff label fail\n"); } body_rect.x1 = body_rect.x2 + 2; body_rect.x2 = body_rect.x1 + 16 + 8; zvd_gui_debug(("fun:%s(), line:%d, (%d,%d) (%d,%d)!\n", __FUNCTION__, __LINE__, body_rect.x1, body_rect.y1, body_rect.x2, body_rect.y2)); rx_overload_cnt_textview = rtgui_textview_create("0", &body_rect); if (NULL != rx_overload_cnt_textview) { RTGUI_WIDGET_TEXTALIGN(RTGUI_WIDGET(rx_overload_cnt_textview)) = RTGUI_ALIGN_CENTER_HORIZONTAL | RTGUI_ALIGN_CENTER_VERTICAL; rtgui_container_add_child(RTGUI_CONTAINER(view), RTGUI_WIDGET(rx_overload_cnt_textview)); } else { printf_syn("creat cable yn textview fail\n"); } #endif #if 1 /* 创建时间标签, 2013-03-18 09:20 */ rtc_dev = rt_device_find("rtc"); if (NULL != rtc_dev) { time_t time; rt_device_control(rtc_dev, RT_DEVICE_CTRL_RTC_GET_TIME, &time); ptime = localtime(&time); rt_sprintf(sys_time_str, "%4d-%02d-%02d %02d:%02d:%02d", (ptime->tm_year+1900), (ptime->tm_mon+1), ptime->tm_mday, ptime->tm_hour, ptime->tm_min, ptime->tm_sec); body_rect.x2 = rtgui_graphic_driver_get_default()->width; body_rect.y2 = rtgui_graphic_driver_get_default()->height; body_rect.x1 = body_rect.x2 - (8+1) * 19; body_rect.y1 = body_rect.y2 - 20; #if SYS_TIME_USE_TEXTBOX sys_time_textbox = rtgui_textbox_create(sys_time_str, RTGUI_TEXTBOX_SINGLE | RTGUI_TEXTBOX_CARET_HIDE); if (NULL != sys_time_textbox) { RTGUI_WIDGET_TEXTALIGN(RTGUI_WIDGET(sys_time_textbox)) = RTGUI_ALIGN_CENTER_HORIZONTAL | RTGUI_ALIGN_CENTER_VERTICAL; //RTGUI_WIDGET_FOREGROUND(RTGUI_WIDGET(sys_time_textbox)) = blue; RTGUI_WIDGET_BACKGROUND(RTGUI_WIDGET(sys_time_textbox)) = blue; //default_background; //RTGUI_WIDGET_BACKGROUND(RTGUI_WIDGET(view)); rtgui_widget_set_rect(RTGUI_WIDGET(sys_time_textbox), &body_rect); rtgui_container_add_child(RTGUI_CONTAINER(view), RTGUI_WIDGET(sys_time_textbox)); } else { printf_syn("creat sys time textbox fail\n"); } #else sys_time_textview = rtgui_textview_create(sys_time_str, &body_rect); if (NULL != sys_time_textview) { RTGUI_WIDGET_TEXTALIGN(RTGUI_WIDGET(sys_time_textview)) = RTGUI_ALIGN_CENTER_HORIZONTAL | RTGUI_ALIGN_CENTER_VERTICAL; //RTGUI_WIDGET_FOREGROUND(RTGUI_WIDGET(sys_time_textbox)) = blue; rtgui_container_add_child(RTGUI_CONTAINER(view), RTGUI_WIDGET(sys_time_textview)); } else { printf_syn("creat sys time textview fail\n"); } #endif } else { printf_syn("find rtc device fail\n"); } #endif rtgui_view_show(view, RT_FALSE); /* 显示视图 */ return ret; }
void rtgui_theme_draw_scrollbar(struct rtgui_scrollbar* bar) { /* draw scroll bar */ struct rtgui_dc* dc; rtgui_rect_t rect, btn_rect, thum_rect, arrow_rect; rtgui_color_t bc, fc; /* begin drawing */ dc = rtgui_dc_begin_drawing(&(bar->parent)); if (dc == RT_NULL) return; rtgui_widget_get_rect(RTGUI_WIDGET(bar), &rect); /* draw background */ fc = RTGUI_WIDGET_FOREGROUND(RTGUI_WIDGET(bar)); if (!RTGUI_WIDGET_IS_ENABLE(RTGUI_WIDGET(bar))) RTGUI_WIDGET_FOREGROUND(RTGUI_WIDGET(bar)) = RTGUI_RGB(128, 128, 128); bc = RTGUI_WIDGET_BACKGROUND(RTGUI_WIDGET(bar)); RTGUI_WIDGET_BACKGROUND(RTGUI_WIDGET(bar)) = white; rtgui_dc_fill_rect(dc, &rect); RTGUI_WIDGET_BACKGROUND(RTGUI_WIDGET(bar)) = bc; if (bar->orient == RTGUI_VERTICAL) { btn_rect = rect; btn_rect.y2 = btn_rect.y1 + (rect.x2 - rect.x1); /* draw up button */ rtgui_dc_fill_rect(dc, &btn_rect); if (bar->status & SBS_UPARROW) rtgui_dc_draw_border(dc, &btn_rect, RTGUI_BORDER_SUNKEN); else rtgui_dc_draw_border(dc, &btn_rect, RTGUI_BORDER_RAISE); /* draw arrow */ arrow_rect.x1 = 0; arrow_rect.y1 = 0; arrow_rect.x2 = 7; arrow_rect.y2 = 4; rtgui_rect_moveto_align(&btn_rect, &arrow_rect, RTGUI_ALIGN_CENTER_HORIZONTAL | RTGUI_ALIGN_CENTER_VERTICAL); rtgui_dc_draw_byte(dc, arrow_rect.x1, arrow_rect.y1, rtgui_rect_height(arrow_rect), _up_arrow); /* draw thumb */ if (RTGUI_WIDGET_IS_ENABLE(RTGUI_WIDGET(bar))) { rtgui_scrollbar_get_thumb_rect(bar, &thum_rect); rtgui_dc_fill_rect(dc, &thum_rect); rtgui_dc_draw_border(dc, &thum_rect, RTGUI_BORDER_RAISE); } /* draw down button */ btn_rect.y1 = rect.y2 - (rect.x2 - rect.x1); btn_rect.y2 = rect.y2; rtgui_dc_fill_rect(dc, &btn_rect); if (bar->status & SBS_DOWNARROW) rtgui_dc_draw_border(dc, &btn_rect, RTGUI_BORDER_SUNKEN); else rtgui_dc_draw_border(dc, &btn_rect, RTGUI_BORDER_RAISE); arrow_rect.x1 = 0; arrow_rect.y1 = 0; arrow_rect.x2 = 7; arrow_rect.y2 = 4; rtgui_rect_moveto_align(&btn_rect, &arrow_rect, RTGUI_ALIGN_CENTER_HORIZONTAL | RTGUI_ALIGN_CENTER_VERTICAL); rtgui_dc_draw_byte(dc, arrow_rect.x1, arrow_rect.y1, rtgui_rect_height(arrow_rect), _down_arrow); } else { btn_rect.x1 = rect.x1; btn_rect.y1 = rect.y1; btn_rect.x2 = rect.y2; btn_rect.y2 = rect.y2; /* draw left button */ rtgui_dc_fill_rect(dc, &btn_rect); if (bar->status & SBS_LEFTARROW) rtgui_dc_draw_border(dc, &btn_rect, RTGUI_BORDER_SUNKEN); else rtgui_dc_draw_border(dc, &btn_rect, RTGUI_BORDER_RAISE); arrow_rect.x1 = 0; arrow_rect.y1 = 0; arrow_rect.x2 = 4; arrow_rect.y2 = 7; rtgui_rect_moveto_align(&btn_rect, &arrow_rect, RTGUI_ALIGN_CENTER_HORIZONTAL | RTGUI_ALIGN_CENTER_VERTICAL); rtgui_dc_draw_byte(dc, arrow_rect.x1, arrow_rect.y1, rtgui_rect_height(arrow_rect), _left_arrow); /* draw thumb */ if (RTGUI_WIDGET_IS_ENABLE(RTGUI_WIDGET(bar))) { rtgui_scrollbar_get_thumb_rect(bar, &thum_rect); rtgui_dc_fill_rect(dc, &thum_rect); rtgui_dc_draw_border(dc, &thum_rect, RTGUI_BORDER_RAISE); } btn_rect.x1 = rect.x2 - rect.y2; btn_rect.x2 = rect.x2; /* draw right button */ rtgui_dc_fill_rect(dc, &btn_rect); if (bar->status & SBS_RIGHTARROW) rtgui_dc_draw_border(dc, &btn_rect, RTGUI_BORDER_SUNKEN); else rtgui_dc_draw_border(dc, &btn_rect, RTGUI_BORDER_RAISE); arrow_rect.x1 = 0; arrow_rect.y1 = 0; arrow_rect.x2 = 4; arrow_rect.y2 = 7; rtgui_rect_moveto_align(&btn_rect, &arrow_rect, RTGUI_ALIGN_CENTER_HORIZONTAL | RTGUI_ALIGN_CENTER_VERTICAL); rtgui_dc_draw_byte(dc, arrow_rect.x1, arrow_rect.y1, rtgui_rect_height(arrow_rect), _right_arrow); } /* end drawing */ rtgui_dc_end_drawing(dc); RTGUI_WIDGET_FOREGROUND(RTGUI_WIDGET(bar)) = fc; return; }
void rtgui_theme_draw_radiobox(struct rtgui_radiobox* radiobox) { struct rtgui_dc* dc; struct rtgui_rect rect, item_rect; int item_size, bord_size, index; rtgui_color_t fc; /* begin drawing */ dc = rtgui_dc_begin_drawing(RTGUI_WIDGET(radiobox)); if (dc == RT_NULL) return; /* get widget rect */ rtgui_widget_get_rect(RTGUI_WIDGET(radiobox), &rect); rtgui_dc_fill_rect(dc, &rect); item_size = radiobox->item_size; /* get board size */ if (radiobox->orient == RTGUI_VERTICAL) bord_size = item_size; else { rtgui_font_get_metrics(RTGUI_DC_FONT(dc), "H", &item_rect); bord_size = rtgui_rect_height(item_rect); } /* draw box */ rtgui_rect_inflate(&rect, -bord_size/2); fc = RTGUI_WIDGET_FOREGROUND(RTGUI_WIDGET(radiobox)); RTGUI_WIDGET_FOREGROUND(RTGUI_WIDGET(radiobox)) = white; rect.x1 ++; rect.y1 ++; rect.x2 ++; rect.y2 ++; rtgui_dc_draw_rect(dc, &rect); RTGUI_WIDGET_FOREGROUND(RTGUI_WIDGET(radiobox)) = RTGUI_RGB(128, 128, 128); rect.x1 --; rect.y1 --; rect.x2 --; rect.y2 --; rtgui_dc_draw_rect(dc, &rect); RTGUI_WIDGET_FOREGROUND(RTGUI_WIDGET(radiobox)) = fc; rtgui_rect_inflate(&rect, bord_size/2); if (radiobox->text != RT_NULL) { struct rtgui_rect text_rect; /* draw group text */ rtgui_font_get_metrics(RTGUI_DC_FONT(dc), radiobox->text, &text_rect); rtgui_rect_moveto(&text_rect, rect.x1 + bord_size + 5, rect.y1); rect.x1 -= 5; rect.x2 += 5; rtgui_dc_fill_rect(dc, &text_rect); rect.x1 += 5; rect.x2 -= 5; rtgui_dc_draw_text(dc, radiobox->text, &text_rect); } /* set init item rect */ item_rect = rect; rtgui_rect_inflate(&item_rect, - bord_size); if (radiobox->orient == RTGUI_VERTICAL) { rt_uint16_t offset; /* set the first text rect */ item_rect.y2 = item_rect.y1 + item_size; offset = (item_size - RADIO_BOX_H) / 2; /* draw each radio button */ for (index = 0; index < radiobox->item_count; index ++) { if (item_rect.y2 > rect.y2 - item_size) break; /* draw radio */ if (radiobox->item_selection == index) { if (RTGUI_WIDGET_IS_FOCUSED(RTGUI_WIDGET(radiobox))) rtgui_dc_draw_focus_rect(dc, &item_rect); rtgui_dc_draw_word(dc, item_rect.x1, item_rect.y1 + offset, RADIO_BOX_H, radio_checked_byte); } else { rtgui_dc_draw_word(dc, item_rect.x1, item_rect.y1 + offset, RADIO_BOX_H, radio_unchecked_byte); } /* draw text */ item_rect.x1 += item_size + 3; rtgui_dc_draw_text(dc, radiobox->items[index], &item_rect); item_rect.x1 -= item_size + 3; item_rect.y1 += item_size; item_rect.y2 += item_size; } } else { /* set the first text rect */ item_rect.x2 = item_rect.x1 + item_size; item_rect.y2 = item_rect.y1 + bord_size; /* draw each radio button */ for (index = 0; index < radiobox->item_count; index ++) { if (item_rect.x2 > rect.x2 - item_size) break; /* draw radio */ if (radiobox->item_selection == index) { if (RTGUI_WIDGET_IS_FOCUSED(RTGUI_WIDGET(radiobox))) rtgui_dc_draw_focus_rect(dc, &item_rect); rtgui_dc_draw_word(dc, item_rect.x1, item_rect.y1, RADIO_BOX_H, radio_checked_byte); } else { rtgui_dc_draw_word(dc, item_rect.x1, item_rect.y1, RADIO_BOX_H, radio_unchecked_byte); } /* draw text */ item_rect.x1 += bord_size + 3; rtgui_dc_draw_text(dc, radiobox->items[index], &item_rect); item_rect.x1 -= bord_size + 3; item_rect.x1 += item_size; item_rect.x2 += (item_size - 1); } } /* end drawing */ rtgui_dc_end_drawing(dc); }
/* window drawing */ void rtgui_theme_draw_win(struct rtgui_topwin* win) { struct rtgui_dc* dc; rtgui_rect_t rect; if (win->title == RT_NULL) return; /* no title and no board */ /* begin drawing */ dc = rtgui_dc_begin_drawing(RTGUI_WIDGET(win->title)); if (dc == RT_NULL) return; /* get rect */ rtgui_widget_get_rect(RTGUI_WIDGET(win->title), &rect); /* draw border */ if (win->flag & WINTITLE_BORDER) { rect.x2 -= 1; rect.y2 -= 1; RTGUI_WIDGET_FOREGROUND(RTGUI_WIDGET(win->title)) = RTGUI_RGB(212, 208, 200); rtgui_dc_draw_hline(dc, rect.x1, rect.x2, rect.y1); rtgui_dc_draw_vline(dc, rect.x1, rect.y1, rect.y2); RTGUI_WIDGET_FOREGROUND(RTGUI_WIDGET(win->title)) = white; rtgui_dc_draw_hline(dc, rect.x1 + 1, rect.x2 - 1, rect.y1 + 1); rtgui_dc_draw_vline(dc, rect.x1 + 1, rect.y1 + 1, rect.y2 - 1); RTGUI_WIDGET_FOREGROUND(RTGUI_WIDGET(win->title)) = RTGUI_RGB(128, 128, 128); rtgui_dc_draw_hline(dc, rect.x1 + 1, rect.x2 - 1, rect.y2 - 1); rtgui_dc_draw_vline(dc, rect.x2 - 1, rect.y1 + 1, rect.y2 - 1); RTGUI_WIDGET_FOREGROUND(RTGUI_WIDGET(win->title)) = RTGUI_RGB(64, 64, 64); rtgui_dc_draw_hline(dc, rect.x1, rect.x2, rect.y2); rtgui_dc_draw_vline(dc, rect.x2, rect.y1, rect.y2); /* shrink border */ rtgui_rect_inflate(&rect, -WINTITLE_BORDER_SIZE); } /* draw title */ if (!(win->flag & WINTITLE_NO)) { rt_uint32_t index; float r, g, b, delta; if (win->flag & WINTITLE_ACTIVATE) { r = 10; g = 36; b = 106; delta = 150 / (float)(rect.x2 - rect.x1); } else { r = 128; g = 128; b = 128; delta = 64 / (float)(rect.x2 - rect.x1); } RTGUI_WIDGET_FOREGROUND(RTGUI_WIDGET(win->title)) = RTGUI_RGB(r, g, b); for (index = rect.x1; index < rect.x2 + 1; index ++) { rtgui_dc_draw_vline(dc, index, rect.y1, rect.y2); r += delta; g += delta; b += delta; } if (win->flag & WINTITLE_ACTIVATE) { RTGUI_WIDGET_FOREGROUND(RTGUI_WIDGET(win->title)) = white; } else { RTGUI_WIDGET_FOREGROUND(RTGUI_WIDGET(win->title)) = RTGUI_RGB(212, 208, 200); } rect.x1 += 4; rect.y1 += 2; rect.y2 = rect.y1 + WINTITLE_CB_HEIGHT; rtgui_dc_draw_text(dc, rtgui_wintitle_get_title(win->title), &rect); if (win->flag & WINTITLE_CLOSEBOX) { /* get close button rect */ rtgui_rect_t box_rect = {0, 0, WINTITLE_CB_WIDTH, WINTITLE_CB_HEIGHT}; rtgui_rect_moveto_align(&rect, &box_rect, RTGUI_ALIGN_CENTER_VERTICAL | RTGUI_ALIGN_RIGHT); box_rect.x1 -= 3; box_rect.x2 -= 3; rtgui_dc_fill_rect(dc, &box_rect); /* draw close box */ if (win->flag & WINTITLE_CB_PRESSED) { rtgui_dc_draw_border(dc, &box_rect, RTGUI_BORDER_SUNKEN); RTGUI_WIDGET_FOREGROUND(RTGUI_WIDGET(win->title)) = red; rtgui_dc_draw_word(dc, box_rect.x1, box_rect.y1 + 6, 7, close_byte); } else { rtgui_dc_draw_border(dc, &box_rect, RTGUI_BORDER_RAISE); RTGUI_WIDGET_FOREGROUND(RTGUI_WIDGET(win->title)) = black; rtgui_dc_draw_word(dc, box_rect.x1 - 1, box_rect.y1 + 5, 7, close_byte); } } } rtgui_dc_end_drawing(dc); }
void rtgui_theme_draw_checkbox(struct rtgui_checkbox* checkbox) { struct rtgui_dc* dc; struct rtgui_rect rect, box_rect; rtgui_color_t bc, fc; fc = RTGUI_WIDGET_FOREGROUND(RTGUI_WIDGET(checkbox)); bc = RTGUI_WIDGET_BACKGROUND(RTGUI_WIDGET(checkbox)); /* begin drawing */ dc = rtgui_dc_begin_drawing(RTGUI_WIDGET(checkbox)); if (dc == RT_NULL) return; /* get rect */ rtgui_widget_get_rect(RTGUI_WIDGET(checkbox), &rect); /* fill rect */ rtgui_dc_fill_rect(dc, &rect); if (RTGUI_WIDGET_IS_FOCUSED(RTGUI_WIDGET(checkbox))) { RTGUI_WIDGET_FOREGROUND(RTGUI_WIDGET(checkbox)) = black; /* draw focused border */ rtgui_rect_inflate(&rect, -1); rtgui_dc_draw_focus_rect(dc, &rect); rtgui_rect_inflate(&rect, 1); } /* draw check box */ box_rect.x1 = 0; box_rect.y1 = 0; box_rect.x2 = CHECK_BOX_W; box_rect.y2 = CHECK_BOX_H; rtgui_rect_moveto_align(&rect, &box_rect, RTGUI_ALIGN_CENTER_VERTICAL); box_rect.x1 += 2; box_rect.x2 += 2; rtgui_dc_draw_border(dc, &box_rect, RTGUI_BORDER_BOX); rtgui_rect_inflate(&box_rect, -1); RTGUI_WIDGET_BACKGROUND(RTGUI_WIDGET(checkbox)) = RTGUI_RGB(247, 247, 246); rtgui_dc_fill_rect(dc, &box_rect); if (checkbox->status_down == RTGUI_CHECKBOX_STATUS_CHECKED) { RTGUI_WIDGET_FOREGROUND(RTGUI_WIDGET(checkbox)) = RTGUI_RGB(33, 161, 33); rtgui_dc_draw_byte(dc, box_rect.x1 + 2, box_rect.y1 + 2, 7, checked_byte); } /* restore saved color */ RTGUI_WIDGET_BACKGROUND(RTGUI_WIDGET(checkbox)) = bc; RTGUI_WIDGET_FOREGROUND(RTGUI_WIDGET(checkbox)) = fc; /* draw text */ rect.x1 += rtgui_rect_height(rect) - 4 + 5; rtgui_dc_draw_text(dc, rtgui_label_get_text(RTGUI_LABEL(checkbox)), &rect); /* end drawing */ rtgui_dc_end_drawing(dc); return; }
void rtgui_theme_draw_textbox(rtgui_textbox_t* box) { /* draw button */ struct rtgui_dc* dc; struct rtgui_rect rect; rtgui_color_t fc; /* 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(RTGUI_WIDGET(box)); /* fill widget rect with white color */ RTGUI_WIDGET_BACKGROUND(RTGUI_WIDGET(box)) = white; rtgui_dc_fill_rect(dc, &rect); /* draw border */ RTGUI_WIDGET_FOREGROUND(RTGUI_WIDGET(box)) = RTGUI_RGB(123, 158, 189); rtgui_dc_draw_rect(dc, &rect); /* draw text */ RTGUI_WIDGET_FOREGROUND(RTGUI_WIDGET(box)) = fc; if (box->text != RT_NULL) { rect.x1 += RTGUI_TEXTBOX_MARGIN; if (box->flag & RTGUI_TEXTBOX_MASK) { /* draw '*' */ rt_size_t len = rt_strlen(box->text); if (len > 0) { char *text_mask = rtgui_malloc(len + 1); rt_memset(text_mask, '*', len + 1); text_mask[len] = 0; rtgui_dc_draw_text(dc, text_mask, &rect); rt_free(text_mask); } } else { rtgui_dc_draw_text(dc, box->text, &rect); } /* draw caret */ if (box->flag & RTGUI_TEXTBOX_CARET_SHOW) { rect.x1 += box->position * box->font_width; rect.x2 = rect.x1 + box->font_width; rect.y2 -= 2; rect.y1 = rect.y2 - 3; RTGUI_WIDGET_BACKGROUND(RTGUI_WIDGET(box)) = black; rtgui_dc_fill_rect(dc, &rect); } } /* end drawing */ rtgui_dc_end_drawing(dc); }
/* 创建用于演示label控件的视图 */ rtgui_container_t *demo_view_label(void) { rtgui_rect_t rect; rtgui_container_t *container; rtgui_label_t *label; rtgui_font_t *font; /* 先创建一个演示用的视图 */ container = demo_view("Label View"); /* 获得视图的位置信息 */ 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("Red Left"); /* 设置label控件上的文本对齐方式为:左对齐 */ RTGUI_WIDGET_TEXTALIGN(label) = RTGUI_ALIGN_LEFT; /* 设置label控件的前景色为红色 */ RTGUI_WIDGET_FOREGROUND(label) = red; /* 设置label的位置 */ rtgui_widget_set_rect(RTGUI_WIDGET(label), &rect); /* container是一个container控件,调用add_child方法添加这个label控件 */ rtgui_container_add_child(container, RTGUI_WIDGET(label)); /* 获得视图的位置信息 */ demo_view_get_rect(container, &rect); rect.x1 += 5; rect.x2 -= 5; rect.y1 += 5 + 25; rect.y2 = rect.y1 + 20; /* 创建一个label控件 */ label = rtgui_label_create("Blue Right"); /* 设置label控件上的文本对齐方式为:右对齐 */ RTGUI_WIDGET_TEXTALIGN(label) = RTGUI_ALIGN_RIGHT; /* 设置label控件的前景色为蓝色 */ RTGUI_WIDGET_FOREGROUND(label) = blue; /* 设置label的位置 */ rtgui_widget_set_rect(RTGUI_WIDGET(label), &rect); /* container是一个container控件,调用add_child方法添加这个label控件 */ rtgui_container_add_child(container, RTGUI_WIDGET(label)); /* 获得视图的位置信息 */ demo_view_get_rect(container, &rect); rect.x1 += 5; rect.x2 -= 5; rect.y1 += 5 + 25 + 25; rect.y2 = rect.y1 + 20; /* 创建一个label控件 */ label = rtgui_label_create("Green Center"); /* 设置label控件的前景色为绿色 */ RTGUI_WIDGET_FOREGROUND(label) = green; /* 设置label控件上的文本对齐方式为:右对齐 */ RTGUI_WIDGET_TEXTALIGN(label) = RTGUI_ALIGN_CENTER_HORIZONTAL; /* 设置label的位置 */ rtgui_widget_set_rect(RTGUI_WIDGET(label), &rect); /* container是一个container控件,调用add_child方法添加这个label控件 */ rtgui_container_add_child(container, RTGUI_WIDGET(label)); /* 获得视图的位置信息 */ demo_view_get_rect(container, &rect); rect.x1 += 5; rect.x2 -= 5; rect.y1 += 5 + 25 + 25 + 25; rect.y2 = rect.y1 + 20; /* 创建一个label控件 */ label = rtgui_label_create("12 font"); /* 设置字体为12点阵的asc字体 */ font = rtgui_font_refer("asc", 12); RTGUI_WIDGET_FONT(label) = font; /* 设置label的位置 */ rtgui_widget_set_rect(RTGUI_WIDGET(label), &rect); /* container是一个container控件,调用add_child方法添加这个label控件 */ rtgui_container_add_child(container, RTGUI_WIDGET(label)); /* 获得视图的位置信息 */ demo_view_get_rect(container, &rect); rect.x1 += 5; rect.y1 += 5 + 25 + 25 + 25 + 25; rect.y2 = rect.y1 + 20; /* 创建一个label控件 */ label = rtgui_label_create("16 font"); /* 设置字体为16点阵的asc字体 */ font = rtgui_font_refer("asc", 16); RTGUI_WIDGET_FONT(label) = font; /* 设置label的位置 */ rtgui_widget_set_rect(RTGUI_WIDGET(label), &rect); /* container是一个container控件,调用add_child方法添加这个label控件 */ rtgui_container_add_child(container, RTGUI_WIDGET(label)); return container; }
/* 创建用于演示checkbox控件的视图 */ rtgui_container_t *demo_view_checkbox(void) { rtgui_rect_t rect; rtgui_container_t *container; rtgui_checkbox_t *checkbox; rtgui_font_t *font; /* 先创建一个演示用的视图 */ container = demo_view("CheckBox View"); /* 获得视图的位置信息 */ demo_view_get_rect(container, &rect); rect.x1 += 5; rect.x2 = rect.x1 + 100; rect.y1 += 5; rect.y2 = rect.y1 + 20; /* 创建一个checkbox控件 */ checkbox = rtgui_checkbox_create("Red", RT_TRUE); /* 设置前景色为红色 */ RTGUI_WIDGET_FOREGROUND(checkbox) = red; /* 设置checkbox的位置 */ rtgui_widget_set_rect(RTGUI_WIDGET(checkbox), &rect); rtgui_container_add_child(container, RTGUI_WIDGET(checkbox)); /* 获得视图的位置信息 */ demo_view_get_rect(container, &rect); rect.x1 += 5; rect.x2 = rect.x1 + 100; rect.y1 += 5 + 25; rect.y2 = rect.y1 + 20; /* 创建一个checkbox控件 */ checkbox = rtgui_checkbox_create("Blue", RT_TRUE); /* 设置前景色为蓝色 */ RTGUI_WIDGET_FOREGROUND(checkbox) = blue; /* 设置checkbox的位置 */ rtgui_widget_set_rect(RTGUI_WIDGET(checkbox), &rect); rtgui_container_add_child(container, RTGUI_WIDGET(checkbox)); /* 获得视图的位置信息 */ demo_view_get_rect(container, &rect); rect.x1 += 5; rect.x2 = rect.x1 + 100; rect.y1 += 5 + 25 + 25; rect.y2 = rect.y1 + 20; /* 创建一个checkbox控件 */ checkbox = rtgui_checkbox_create("12 font", RT_TRUE); /* 设置字体为12点阵 */ font = rtgui_font_refer("asc", 12); RTGUI_WIDGET_FONT(checkbox) = font; /* 设置checkbox的位置 */ rtgui_widget_set_rect(RTGUI_WIDGET(checkbox), &rect); rtgui_container_add_child(container, RTGUI_WIDGET(checkbox)); /* 获得视图的位置信息 */ demo_view_get_rect(container, &rect); rect.x1 += 5; rect.x2 = rect.x1 + 100; rect.y1 += 5 + 25 + 25 + 25; rect.y2 = rect.y1 + 20; /* 创建一个checkbox控件 */ checkbox = rtgui_checkbox_create("16 font", RT_TRUE); /* 设置字体为16点阵 */ font = rtgui_font_refer("asc", 16); RTGUI_WIDGET_FONT(checkbox) = font; /* 设置checkbox的位置 */ rtgui_widget_set_rect(RTGUI_WIDGET(checkbox), &rect); rtgui_container_add_child(container, RTGUI_WIDGET(checkbox)); return container; }
/* 创建用于演示button控件的视图 */ rtgui_container_t *demo_view_button(void) { rtgui_rect_t rect; rtgui_container_t *container; rtgui_button_t *button; rtgui_font_t *font; /* 先创建一个演示用的视图 */ container = demo_view("Button View"); /* 获得视图的位置信息 */ demo_view_get_rect(container, &rect); rect.x1 += 5; rect.x2 = rect.x1 + 100; rect.y1 += 5; rect.y2 = rect.y1 + 20; /* 创建一个button控件 */ button = rtgui_button_create("Red"); /* 设置label控件的前景色为红色 */ RTGUI_WIDGET_FOREGROUND(button) = red; /* 设置button的位置 */ rtgui_widget_set_rect(RTGUI_WIDGET(button), &rect); rtgui_container_add_child(container, RTGUI_WIDGET(button)); /* 获得视图的位置信息 */ demo_view_get_rect(container, &rect); rect.x1 += 5; rect.x2 = rect.x1 + 100; rect.y1 += 5 + 25; rect.y2 = rect.y1 + 20; /* 创建一个button控件 */ button = rtgui_button_create("Blue"); /* 设置label控件的前景色为蓝色 */ RTGUI_WIDGET_FOREGROUND(button) = blue; /* 设置button的位置 */ rtgui_widget_set_rect(RTGUI_WIDGET(button), &rect); rtgui_container_add_child(container, RTGUI_WIDGET(button)); /* 获得视图的位置信息 */ demo_view_get_rect(container, &rect); rect.x1 += 5; rect.x2 = rect.x1 + 100; rect.y1 += 5 + 25 + 25; rect.y2 = rect.y1 + 20; /* 创建一个button控件 */ button = rtgui_button_create("12 font"); /* 设置字体为12点阵的asc字体 */ font = rtgui_font_refer("asc", 12); RTGUI_WIDGET_FONT(button) = font; /* 设置button的位置 */ rtgui_widget_set_rect(RTGUI_WIDGET(button), &rect); rtgui_container_add_child(container, RTGUI_WIDGET(button)); /* 获得视图的位置信息 */ demo_view_get_rect(container, &rect); rect.x1 += 5; rect.x2 = rect.x1 + 100; rect.y1 += 5 + 25 + 25 + 25; rect.y2 = rect.y1 + 20; /* 创建一个button控件 */ button = rtgui_button_create("16 font"); /* 设置字体为16点阵的asc字体 */ font = rtgui_font_refer("asc", 16); RTGUI_WIDGET_FONT(button) = font; /* 设置button的位置 */ rtgui_widget_set_rect(RTGUI_WIDGET(button), &rect); rtgui_container_add_child(container, RTGUI_WIDGET(button)); return container; }