/** * @brief 初始化窗口管理器图形相关 * * @param framebuffer_path framebuffer设备路径 * @param top_margin 配置项 屏幕上方留白的像素 * @param down_margin 配置项 屏幕下方留白的像素 * @param left_margin 配置项 屏幕左方留白的像素 * @param right_margin 配置项 屏幕右方留白的像素 * * @return 成功返回0 否则返回-1 **/ static si_t graph_init(char* framebuffer_path, si_t top_margin, si_t down_margin, si_t left_margin, si_t right_margin) { struct graphics_device* gd_ptr = NULL; /* 初始化屏幕 */ screen_init(framebuffer_path); /* 设置颜色的限制 */ screen_color_limit(); /** * 初始化窗口管理器的图形设备 **/ global_wm.gd_handler = engine_graphics_device_init(0, 0, global_screen.width, global_screen.height, 0,0,0,0,0); if(0 == global_wm.gd_handler) { EGUI_PRINT_ERROR("failed to init window manager graph device."); return -1; } gd_ptr = (struct graphics_device*)global_wm.gd_handler; gd_ptr->screen.memory_addr = global_screen.memory_addr; gd_ptr->screen.buffer_addr = NULL; gd_ptr->screen.video_access_mode = VIDEO_ACCESS_MODE_DIRECT; /** * 初始化窗口区域 **/ rectangle_set(&global_wm.work_area, 0 + left_margin, 0 + top_margin, global_screen.width - left_margin - right_margin, global_screen.height - top_margin - down_margin); /** 绘制桌面 **/ engine_set_color(global_wm.gd_handler, global_wm.backcolor.r, global_wm.backcolor.g, global_wm.backcolor.b, global_wm.backcolor.a); engine_fill_rectangle(global_wm.gd_handler, global_wm.work_area.x, global_wm.work_area.y, global_wm.work_area.width, global_wm.work_area.height); return 0; }
int main() { char input[16]; int done = 0, state; if (!engine_init()) return 1; init_states(); while (!done) { state = read_keyword(input, sizeof(input)); if (state == 0) break; if (state == STATE_ERROR) continue; //fprintf(stderr, "cmd %s state %d\n", input, state); switch (state) { case STATE_BLACK: engine_set_color(BLACK); break; case STATE_WHITE: engine_set_color(WHITE); break; case STATE_CGCBOARD: write_string("\n"); break; case STATE_DRAW: engine_offer_draw(); break; case STATE_FORCE: engine_set_go(0); break; case STATE_GO: engine_set_go(1); break; case STATE_NEW: engine_new(); break; case STATE_RANDOM: engine_set_random(!engine_get_random()); break; case STATE_RESULT: if (!handle_result()) done = 1; break; case STATE_REMOVE: engine_undo(); engine_undo(); break; case STATE_QUIT: write_string("bye\n"); done = 1; break; case STATE_SD: if (!handle_sd()) done = 1; break; case STATE_UNDO: engine_undo(); break; case STATE_MOVE: engine_move(str_to_move(input)); break; case STATE_PLAY: engine_go(); break; } } engine_destroy(); return 0; }