static struct window * create_window(struct display *display, int width, int height) { struct window *window; window = calloc(1, sizeof *window); if (!window) return NULL; window->callback = NULL; window->display = display; window->width = width; window->height = height; window->surface = wl_compositor_create_surface(display->compositor); if (display->shell) { window->xdg_surface = xdg_shell_get_xdg_surface(display->shell, window->surface); assert(window->xdg_surface); xdg_surface_add_listener(window->xdg_surface, &xdg_surface_listener, window); xdg_surface_set_title(window->xdg_surface, "simple-shm"); } else if (display->fshell) { zwp_fullscreen_shell_v1_present_surface(display->fshell, window->surface, ZWP_FULLSCREEN_SHELL_V1_PRESENT_METHOD_DEFAULT, NULL); } else if (display->ivi_application ) { uint32_t id_ivisurf = IVI_SURFACE_ID + (uint32_t)getpid(); window->ivi_surface = ivi_application_surface_create(display->ivi_application, id_ivisurf, window->surface); if (window->ivi_surface == NULL) { fprintf(stderr, "Failed to create ivi_client_surface\n"); abort(); } ivi_surface_add_listener(window->ivi_surface, &ivi_surface_listener, window); } else { assert(0); } return window; }
void SetUp() { ASSERT_EQ(ILM_SUCCESS, ilm_initWithNativedisplay((t_ilm_nativedisplay)wlDisplay)); iviSurfaces.reserve(10); struct iviSurface surf; for (int i = 0; i < (int)iviSurfaces.capacity(); ++i) { surf.surface = ivi_application_surface_create(iviApp, i+500, wlSurfaces[i]); surf.surface_id = i+500; iviSurfaces.push_back(surf); } wl_display_flush(wlDisplay); }
UwacWindow* UwacCreateWindowShm(UwacDisplay* display, uint32_t width, uint32_t height, enum wl_shm_format format) { UwacWindow* w; int allocSize, ret; if (!display) { return NULL; } w = zalloc(sizeof(*w)); if (!w) { display->last_error = UWAC_ERROR_NOMEMORY; return NULL; } w->display = display; w->format = format; w->width = width; w->height = height; w->stride = width * bppFromShmFormat(format); allocSize = w->stride * height; ret = UwacWindowShmAllocBuffers(w, UWAC_INITIAL_BUFFERS, allocSize, width, height, format); if (ret != UWAC_SUCCESS) { display->last_error = ret; goto out_error_free; } w->buffers[0].used = true; w->drawingBuffer = &w->buffers[0]; w->surface = wl_compositor_create_surface(display->compositor); if (!w->surface) { display->last_error = UWAC_ERROR_NOMEMORY; goto out_error_surface; } wl_surface_set_user_data(w->surface, w); if (display->xdg_shell) { w->xdg_surface = xdg_shell_get_xdg_surface(display->xdg_shell, w->surface); if (!w->xdg_surface) { display->last_error = UWAC_ERROR_NOMEMORY; goto out_error_shell; } assert(w->xdg_surface); xdg_surface_add_listener(w->xdg_surface, &xdg_surface_listener, w); #if BUILD_IVI } else if (display->ivi_application) { w->ivi_surface = ivi_application_surface_create(display->ivi_application, 1, w->surface); assert(w->ivi_surface); ivi_surface_add_listener(w->ivi_surface, &ivi_surface_listener, w); #endif #if BUILD_FULLSCREEN_SHELL } else if (display->fullscreen_shell) { _wl_fullscreen_shell_present_surface(display->fullscreen_shell, w->surface, _WL_FULLSCREEN_SHELL_PRESENT_METHOD_CENTER, NULL); #endif } else { w->shell_surface = wl_shell_get_shell_surface(display->shell, w->surface); assert(w->shell_surface); wl_shell_surface_add_listener(w->shell_surface, &shell_listener, w); wl_shell_surface_set_toplevel(w->shell_surface); } wl_list_insert(display->windows.prev, &w->link); display->last_error = UWAC_SUCCESS; return w; out_error_shell: wl_surface_destroy(w->surface); out_error_surface: UwacWindowDestroyBuffers(w); out_error_free: free(w); return NULL; }