int rtgui_system_server_init(void) { rt_mutex_init(&_screen_lock, "screen", RT_IPC_FLAG_FIFO); /* the graphic device driver must be set before initialization */ RT_ASSERT(rtgui_graphic_driver_get_default() != RT_NULL); /* init image */ rtgui_system_image_init(); /* init font */ rtgui_font_system_init(); /* set the rect of main window to full screen */ rtgui_graphic_driver_get_rect(rtgui_graphic_driver_get_default(), &_mainwin_rect); /* init rtgui server */ rtgui_topwin_init(); rtgui_server_init(); /* use driver rect for main window */ rtgui_graphic_driver_get_rect(rtgui_graphic_driver_get_default(), &_mainwin_rect); /* init theme */ rtgui_system_theme_init(); return 0; }
struct rtgui_dc* rtgui_graphic_driver_get_rect_buffer(const struct rtgui_graphic_driver *driver, struct rtgui_rect *r) { int w, h; struct rtgui_dc_buffer *buffer; rt_uint8_t *pixel, *dst; struct rtgui_rect src, rect; /* use virtual framebuffer in default */ if (driver == RT_NULL) driver = _current_driver; if (r == RT_NULL) { rtgui_graphic_driver_get_rect(driver, &rect); } else { rtgui_graphic_driver_get_rect(driver, &src); rect = *r; rtgui_rect_intersect(&src, &rect); } w = rtgui_rect_width (rect); h = rtgui_rect_height(rect); if (!(w && h) || driver->framebuffer == RT_NULL) return RT_NULL; /* create buffer DC */ buffer = (struct rtgui_dc_buffer*)rtgui_dc_buffer_create_pixformat(driver->pixel_format, w, h); if (buffer == RT_NULL) return (struct rtgui_dc*)buffer; /* get source pixel */ pixel = (rt_uint8_t*)driver->framebuffer + rect.y1 * driver->pitch + rect.x1 * rtgui_color_get_bpp(driver->pixel_format); dst = buffer->pixel; while (h--) { memcpy(dst, pixel, buffer->pitch); dst += buffer->pitch; pixel += driver->pitch; } return (struct rtgui_dc*)buffer; }
int rtgui_system_server_init(void) { rt_mutex_init(&_screen_lock, "screen", RT_IPC_FLAG_FIFO); /* init image */ rtgui_system_image_init(); /* init font */ rtgui_font_system_init(); /* init rtgui server */ rtgui_topwin_init(); rtgui_server_init(); /* use driver rect for main window */ rtgui_graphic_driver_get_rect(rtgui_graphic_driver_get_default(), &_mainwin_rect); /* set the default font */ #if RTGUI_DEFAULT_FONT_SIZE == 16 rtgui_font_set_defaut(&rtgui_font_asc16); #elif RTGUI_DEFAULT_FONT_SIZE == 12 rtgui_font_set_defaut(&rtgui_font_asc12); #else rtgui_font_set_defaut(&rtgui_font_asc12); #endif return 0; }
static void rtgui_filelist_view_menu_pop(rtgui_widget_t *parent) { struct rtgui_win *menu; rtgui_rect_t screen, rect = {0, 0, 140, 85}; rtgui_graphic_driver_get_rect(rtgui_graphic_driver_get_default(), &screen); rtgui_rect_moveto_align(&screen, &rect, RTGUI_ALIGN_CENTER_HORIZONTAL | RTGUI_ALIGN_CENTER_VERTICAL); menu = rtgui_win_create(RTGUI_WIN(rtgui_widget_get_toplevel(parent)), "Folder Menu", &rect, RTGUI_WIN_STYLE_DESTROY_ON_CLOSE); if (menu != RT_NULL) { rtgui_listbox_t *listbox; /* Pass the pointer to filelist_view via user_data. */ menu->user_data = (rt_uint32_t)parent; rtgui_win_set_ondeactivate(menu, rtgui_filelist_view_on_menu_deactivate); listbox = rtgui_listbox_create(_folder_actions, sizeof(_folder_actions) / sizeof(_folder_actions[0]), &rect); /* Set the item index *before* setup the callback. `set_current_item` * will invoke the "onitem". So just keep it clean when setting the * current item. */ rtgui_listbox_set_current_item(listbox, 0); rtgui_listbox_set_onitem(listbox, rtgui_filelist_view_on_folder_item); rtgui_container_add_child(RTGUI_CONTAINER(menu), RTGUI_WIDGET(listbox)); rtgui_win_show(menu, RT_TRUE); } }
static void rtgui_filelist_view_menu_pop(rtgui_widget_t *parent) { rtgui_win_t *menu; rtgui_listbox_t *listbox; rtgui_rect_t screen, rect = {0, 0, 140, 85}; rtgui_graphic_driver_get_rect(rtgui_graphic_driver_get_default(), &screen); rtgui_rect_moveto_align(&screen, &rect, RTGUI_ALIGN_CENTER_HORIZONTAL | RTGUI_ALIGN_CENTER_VERTICAL); menu = rtgui_win_create(RTGUI_WIN(rtgui_widget_get_toplevel(parent)), "Folder Menu", &rect, RTGUI_WIN_STYLE_DEFAULT); if (menu != RT_NULL) { /* set user data on menu window */ menu->user_data = (rt_uint32_t)parent; rtgui_win_set_ondeactivate(menu, rtgui_filelist_view_on_menu_deactivate); listbox = rtgui_listbox_create(items, sizeof(items)/sizeof(items[0]), &rect); rtgui_listbox_set_onitem(listbox, rtgui_filelist_view_on_folder_item); rtgui_container_add_child(RTGUI_CONTAINER(menu), RTGUI_WIDGET(listbox)); rtgui_win_show(menu, RT_FALSE); rtgui_widget_focus(RTGUI_WIDGET(listbox)); rtgui_listbox_set_current_item(listbox, 0); } }
void calibration_entry(void* parameter) { rt_device_t device; struct rtgui_rect rect; struct setup_items setup; device = rt_device_find("touch"); if (device == RT_NULL) return; /* no this device */ calibration_ptr = (struct calibration_session*) rt_malloc(sizeof(struct calibration_session)); rt_memset(calibration_ptr, 0, sizeof(struct calibration_data)); calibration_ptr->device = device; rt_device_control(calibration_ptr->device, RT_TOUCH_CALIBRATION, (void*)calibration_data_post); rtgui_graphic_driver_get_rect(rtgui_graphic_driver_get_default(), &rect); /* set screen rect */ calibration_ptr->width = rect.x2; calibration_ptr->height = rect.y2; calibration_ptr->app = rtgui_app_create("calibration"); if (calibration_ptr->app != RT_NULL) { /* create calibration window */ calibration_ptr->win = rtgui_win_create(RT_NULL, "calibration", &rect, RTGUI_WIN_STYLE_NO_TITLE | RTGUI_WIN_STYLE_NO_BORDER | RTGUI_WIN_STYLE_ONTOP | RTGUI_WIN_STYLE_DESTROY_ON_CLOSE); if (calibration_ptr->win != RT_NULL) { rtgui_object_set_event_handler(RTGUI_OBJECT(calibration_ptr->win), calibration_event_handler); rtgui_win_show(calibration_ptr->win, RT_TRUE); } rtgui_app_destroy(calibration_ptr->app); } /* set calibration data */ rt_device_control(calibration_ptr->device, RT_TOUCH_CALIBRATION_DATA, &calibration_ptr->data); //save setup setup.touch_min_x = calibration_ptr->data.min_x; setup.touch_max_x = calibration_ptr->data.max_x; setup.touch_min_y = calibration_ptr->data.min_y; setup.touch_max_y = calibration_ptr->data.max_y; setup_save(&setup); /* recover to normal */ rt_device_control(calibration_ptr->device, RT_TOUCH_NORMAL, RT_NULL); /* release memory */ rt_free(calibration_ptr); calibration_ptr = RT_NULL; }
void picture_show(void) { /* create application */ struct rtgui_app *app; struct rtgui_rect rect1; struct rtgui_win *win_main; rtgui_timer_t *timer; app = rtgui_app_create(rt_thread_self(), "gui_app"); if (app == RT_NULL) { rt_kprintf("Create application \"gui_app\" failed!\n"); return; } rtgui_graphic_driver_get_rect(rtgui_graphic_driver_get_default(), &rect1); /* 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; } /* create container in main window */ container = rtgui_container_create(); if (container == RT_NULL) { rt_kprintf("Create container failed!\n"); return; } rtgui_widget_set_rect(RTGUI_WIDGET(container), &rect1); rtgui_object_set_event_handler(RTGUI_OBJECT(container), picture_view_event_handler); rtgui_container_add_child(RTGUI_CONTAINER(win_main), RTGUI_WIDGET(container)); timer = rtgui_timer_create(500, RT_TIMER_FLAG_PERIODIC, timeout, RT_NULL); rtgui_timer_start(timer); rtgui_win_set_onkey(win_main, onkey_handle); rtgui_win_show(win_main, RT_FALSE); /* show next picture */ picture_show_next(); rtgui_app_run(app); rtgui_app_destroy(app); }
void calibration_entry(void* parameter) { rt_mq_t mq; rtgui_win_t* win; struct rtgui_rect rect; mq = rt_mq_create("cali", 40, 8, RT_IPC_FLAG_FIFO); if (mq == RT_NULL) return; rtgui_thread_register(rt_thread_self(), mq); rtgui_graphic_driver_get_rect(rtgui_graphic_driver_get_default(), &rect); /* set screen rect */ calibration_ptr->width = rect.x2; calibration_ptr->height = rect.y2; /* create calibration window */ win = rtgui_win_create(RT_NULL, "calibration", &rect, RTGUI_WIN_STYLE_NO_TITLE | RTGUI_WIN_STYLE_NO_BORDER); rtgui_widget_set_event_handler(RTGUI_WIDGET(win), calibration_event_handler); if (win != RT_NULL) { rtgui_win_show(win, RT_FALSE); // rtgui_widget_update(RTGUI_WIDGET(win)); rtgui_win_event_loop(win); } rtgui_thread_deregister(rt_thread_self()); rt_mq_delete(mq); /* set calibration data */ rt_device_control(calibration_ptr->device, RT_TOUCH_CALIBRATION_DATA, &calibration_ptr->data); /* recover to normal */ rt_device_control(calibration_ptr->device, RT_TOUCH_NORMAL, RT_NULL); /* release memory */ rt_free(calibration_ptr); calibration_ptr = RT_NULL; /* tell other thread that we finished calibration */ rt_sem_release(touch_screen_calibrated); }
void picture_show(void* parameter) { /* create application */ struct rtgui_app *app; struct rtgui_rect rect1; rtgui_timer_t *timer; app = rtgui_app_create(rt_thread_self(), "picture"); if (app == RT_NULL) { rt_kprintf("Create application \"picture\" failed!\n"); return; } rtgui_graphic_driver_get_rect(rtgui_graphic_driver_get_default(), &rect1); /* create main window */ win = rtgui_mainwin_create(RT_NULL, "main", RTGUI_WIN_STYLE_NO_BORDER | RTGUI_WIN_STYLE_NO_TITLE); if (win == RT_NULL) { rt_kprintf("Create window \"main\" failed!\n"); rtgui_app_destroy(app); return; } timer = rtgui_timer_create(500, RT_TIMER_FLAG_PERIODIC, timeout, (void*)win); rtgui_timer_start(timer); rtgui_object_set_event_handler(RTGUI_OBJECT(win), picture_view_event_handler); rtgui_win_set_onkey(win, onkey_handle); rtgui_win_show(win, RT_FALSE); /* show next picture */ picture_show_next(RTGUI_WIDGET(win)); rtgui_app_run(app); rtgui_app_destroy(app); }
void create_wins(struct rtgui_app *app, void *parameter) { struct rtgui_win *win1, *win2, *win3, *win4; struct rtgui_label *label; struct rtgui_rect rect; if (parameter) { struct rtgui_win *dsk; rtgui_graphic_driver_get_rect(rtgui_graphic_driver_get_default(), &rect); dsk = rtgui_win_create(RT_NULL, "desktop", &rect, RTGUI_WIN_STYLE_ONBTM); rtgui_win_show(dsk, RT_FALSE); } rect.x1 = 40, rect.y1 = 40, rect.x2 = 200, rect.y2 = 80; win1 = rtgui_win_create(RT_NULL, "test window", &rect, RTGUI_WIN_STYLE_DEFAULT); rtgui_win_set_onclose(win1, on_window_close); rect.x1 += 20; rect.x2 -= 5; rect.y1 += 5; rect.y2 = rect.y1 + 20; label = rtgui_label_create("window in modal mode"); rtgui_widget_set_rect(RTGUI_WIDGET(label), &rect); rtgui_container_add_child(RTGUI_CONTAINER(win1), RTGUI_WIDGET(label)); rtgui_win_show(win1, RT_TRUE); rt_kprintf("win1 terminated\n"); /*rtgui_win_destroy(win1);*/ rect.x1 = 20; rect.y1 = 80; rect.x2 = 180; rect.y2 = 90; win2 = rtgui_win_create(win1, "test window2", &rect, RTGUI_WIN_STYLE_DEFAULT); rtgui_win_set_onclose(win2, on_window_close); rtgui_win_show(win1, RT_FALSE); /*rtgui_win_show(win2, RT_TRUE);*/ /* create second window tree */ rect.y1 = 150; rect.y2 = rect.y1 + 50; win3 = rtgui_win_create(RT_NULL, "test tree2", &rect, RTGUI_WIN_STYLE_DEFAULT); rtgui_win_set_onclose(win3, on_window_close); rect.x1 += 20; rect.x2 -= 5; rect.y1 += 5; rect.y2 = rect.y1 + 20; label = rtgui_label_create("window in modal mode"); rtgui_widget_set_rect(RTGUI_WIDGET(label), &rect); rtgui_container_add_child(RTGUI_CONTAINER(win3), RTGUI_WIDGET(label)); rect.x1 = 20; rect.y1 = 180; rect.x2 = 180; rect.y2 = 190; win4 = rtgui_win_create(win3, "test tree2.1", &rect, RTGUI_WIN_STYLE_DEFAULT); rtgui_win_set_onclose(win4, on_window_close); rtgui_win_show(win3, RT_FALSE); /*rtgui_win_show(win4, RT_TRUE);*/ rtgui_app_run(app); rtgui_win_destroy(win1); rtgui_win_destroy(win2); rtgui_win_destroy(win3); rtgui_win_destroy(win4); }
static void application_entry(void* parameter) { struct rtgui_application *app; struct rtgui_rect rect; app = rtgui_application_create(rt_thread_self(), "gui_demo"); if (app == RT_NULL) return; /* create a full screen window */ rtgui_graphic_driver_get_rect(rtgui_graphic_driver_get_default(), &rect); main_win = rtgui_win_create(RT_NULL, "demo_win", &rect, RTGUI_WIN_STYLE_NO_BORDER | RTGUI_WIN_STYLE_NO_TITLE); if (main_win == RT_NULL) { rtgui_application_destroy(app); return; } rtgui_win_set_onkey(main_win, demo_handle_key); /* create a no title notebook that we can switch demo on it easily. */ the_notebook = rtgui_notebook_create(&rect, RTGUI_NOTEBOOK_NOTAB); if (the_notebook == RT_NULL) { rtgui_win_destroy(main_win); rtgui_application_destroy(app); return; } rtgui_container_add_child(RTGUI_CONTAINER(main_win), RTGUI_WIDGET(the_notebook)); /* 初始化各个例子的视图 */ demo_view_benchmark(); demo_view_dc(); #ifdef RTGUI_USING_TTF demo_view_ttf(); #endif #ifndef RTGUI_USING_SMALL_SIZE demo_view_dc_buffer(); #endif demo_view_animation(); #ifndef RTGUI_USING_SMALL_SIZE demo_view_buffer_animation(); demo_view_instrument_panel(); #endif demo_view_window(); demo_view_label(); demo_view_button(); demo_view_checkbox(); demo_view_progressbar(); demo_view_scrollbar(); demo_view_radiobox(); demo_view_textbox(); demo_view_listbox(); demo_view_menu(); demo_view_listctrl(); demo_view_combobox(); demo_view_slider(); demo_view_notebook(); demo_view_mywidget(); #if 0 #if defined(RTGUI_USING_DFS_FILERW) || defined(RTGUI_USING_STDIO_FILERW) demo_view_image(); #endif #ifdef RT_USING_MODULE #if defined(RTGUI_USING_DFS_FILERW) || defined(RTGUI_USING_STDIO_FILERW) demo_view_module(); #endif #endif demo_listview_view(); demo_listview_icon_view(); #if defined(RTGUI_USING_DFS_FILERW) || defined(RTGUI_USING_STDIO_FILERW) demo_fn_view(); #endif #endif rtgui_win_show(main_win, RT_FALSE); /* 执行工作台事件循环 */ rtgui_application_run(app); rtgui_application_destroy(app); }
void rtgui_get_screen_rect(struct rtgui_rect *rect) { rtgui_graphic_driver_get_rect(rtgui_graphic_driver_get_default(), rect); }
static void calibration_entry(void *parameter) { rt_device_t device; struct rtgui_rect rect; device = rt_device_find("touch"); if (device == RT_NULL) { rt_kprintf("RTGUI: no touch device to calibrate\n"); return; } calibration_ptr = (struct calibration_session *) rt_malloc(sizeof(*calibration_ptr)); rt_memset(calibration_ptr, 0, sizeof(*calibration_ptr)); calibration_ptr->device = device; rt_device_control(calibration_ptr->device, RT_TOUCH_CALIBRATION, (void *)calibration_data_post); rtgui_graphic_driver_get_rect(rtgui_graphic_driver_get_default(), &rect); /* set screen rect */ calibration_ptr->width = rect.x2; calibration_ptr->height = rect.y2; calibration_ptr->app = rtgui_app_create("calibration"); if (calibration_ptr->app == RT_NULL) { rt_kprintf("RTGUI: no mem to create calibration app\n"); goto __free_ptr; } /* create calibration window */ calibration_ptr->win = rtgui_win_create(RT_NULL, "calibration", &rect, RTGUI_WIN_STYLE_NO_TITLE | RTGUI_WIN_STYLE_NO_BORDER | RTGUI_WIN_STYLE_ONTOP | RTGUI_WIN_STYLE_DESTROY_ON_CLOSE); if (calibration_ptr->win != RT_NULL) { rtgui_object_set_event_handler(RTGUI_OBJECT(calibration_ptr->win), calibration_event_handler); rtgui_win_show(calibration_ptr->win, RT_TRUE); } rtgui_app_destroy(calibration_ptr->app); /* set calibration data */ rt_device_control(calibration_ptr->device, RT_TOUCH_CALIBRATION_DATA, RT_NULL); if (_cali_after) _cali_after(cal_data); /* recover to normal */ rt_device_control(calibration_ptr->device, RT_TOUCH_NORMAL, RT_NULL); __free_ptr: /* release memory */ rt_free(calibration_ptr); calibration_ptr = RT_NULL; }