Lines Matching refs:window

144 static void init_wl_registry(WLWindow* window);
145 static void init_xdg_window(WLWindow* window);
150 WLWindow* window = new WLWindow; in com_wl_create_window() local
152 window->display = display; in com_wl_create_window()
153 window->geometry.width = width; in com_wl_create_window()
154 window->geometry.height = height; in com_wl_create_window()
155 window->enable_compositor = enable_compositor; in com_wl_create_window()
156 window->sync_mode = sync_mode; in com_wl_create_window()
157 window->closed = false; in com_wl_create_window()
162 init_wl_registry(window); in com_wl_create_window()
165 window->closed = true; in com_wl_create_window()
168 window->eglDisplay = in com_wl_create_window()
171 eglInitialize(window->eglDisplay, nullptr, nullptr); in com_wl_create_window()
192 eglChooseConfig(window->eglDisplay, cfg_attribs, configs, in com_wl_create_window()
195 window->config = configs[0]; in com_wl_create_window()
206 window->eglContext = eglCreateContext(window->eglDisplay, window->config, in com_wl_create_window()
209 window->surface = wl_compositor_create_surface(display->compositor); in com_wl_create_window()
210 init_xdg_window(window); in com_wl_create_window()
213 wl_compositor_create_region(window->display->compositor); in com_wl_create_window()
215 wl_surface_set_opaque_region(window->surface, region); in com_wl_create_window()
219 xdg_toplevel_set_title(window->xdg_toplevel, in com_wl_create_window()
222 xdg_toplevel_set_title(window->xdg_toplevel, "example-compositor (Simple)"); in com_wl_create_window()
225 window->wait_for_configure = true; in com_wl_create_window()
226 wl_surface_commit(window->surface); in com_wl_create_window()
228 EGLBoolean ok = eglMakeCurrent(window->eglDisplay, EGL_NO_SURFACE, in com_wl_create_window()
229 EGL_NO_SURFACE, window->eglContext); in com_wl_create_window()
236 return window; in com_wl_create_window()
239 bool com_wl_tick(WLWindow* window) { in com_wl_tick() argument
240 if (window->wait_for_configure) { in com_wl_tick()
242 while (window->wait_for_configure && !window->closed && ret != -1) { in com_wl_tick()
243 wl_display_dispatch(window->display->display); in com_wl_tick()
246 wl_display_dispatch_pending(window->display->display); in com_wl_tick()
249 return !window->closed; in com_wl_tick()
252 static void unmap_hidden_tiles(WLWindow* window) { in unmap_hidden_tiles() argument
253 for (Tile* tile : window->hiddenTiles) { in unmap_hidden_tiles()
259 window->hiddenTiles.clear(); in unmap_hidden_tiles()
262 static void clean_up_tiles(WLWindow* window) { in clean_up_tiles() argument
263 for (Tile* tile : window->destroyedTiles) { in clean_up_tiles()
264 eglDestroySurface(window->eglDisplay, tile->egl_surface); in clean_up_tiles()
270 window->destroyedTiles.clear(); in clean_up_tiles()
275 WLWindow* window = (WLWindow*)data; in handle_callback() local
278 assert(window->callback == callback); in handle_callback()
281 window->callback = nullptr; in handle_callback()
286 void com_wl_swap_buffers(WLWindow* window) { in com_wl_swap_buffers() argument
287 if (window->enable_compositor) { in com_wl_swap_buffers()
288 for (auto surface_it = window->surfaces.begin(); in com_wl_swap_buffers()
289 surface_it != window->surfaces.end(); ++surface_it) { in com_wl_swap_buffers()
297 eglMakeCurrent(window->eglDisplay, tile->egl_surface, in com_wl_swap_buffers()
298 tile->egl_surface, window->eglContext); in com_wl_swap_buffers()
299 eglSwapInterval(window->eglDisplay, 0); in com_wl_swap_buffers()
306 eglSwapBuffers(window->eglDisplay, tile->egl_surface); in com_wl_swap_buffers()
309 eglMakeCurrent(window->eglDisplay, EGL_NO_SURFACE, EGL_NO_SURFACE, in com_wl_swap_buffers()
310 window->eglContext); in com_wl_swap_buffers()
316 wl_surface_commit(window->surface); in com_wl_swap_buffers()
317 unmap_hidden_tiles(window); in com_wl_swap_buffers()
318 clean_up_tiles(window); in com_wl_swap_buffers()
321 switch (window->sync_mode) { in com_wl_swap_buffers()
323 wl_display_roundtrip(window->display->display); in com_wl_swap_buffers()
326 window->callback = wl_surface_frame(window->surface); in com_wl_swap_buffers()
327 wl_callback_add_listener(window->callback, &frame_listener, window); in com_wl_swap_buffers()
328 wl_surface_commit(window->surface); in com_wl_swap_buffers()
330 while (window->callback && !window->closed && ret != -1) { in com_wl_swap_buffers()
331 ret = wl_display_dispatch(window->display->display); in com_wl_swap_buffers()
340 switch (window->sync_mode) { in com_wl_swap_buffers()
342 eglSwapInterval(window->eglDisplay, 0); in com_wl_swap_buffers()
345 eglSwapInterval(window->eglDisplay, 1); in com_wl_swap_buffers()
351 eglSwapBuffers(window->eglDisplay, window->egl_surface); in com_wl_swap_buffers()
356 void com_wl_create_surface(WLWindow* window, uint64_t surface_id, in com_wl_create_surface() argument
358 assert(window->surfaces.count(surface_id) == 0); in com_wl_create_surface()
366 window->surfaces.emplace(surface_id, surface); in com_wl_create_surface()
369 void com_wl_create_tile(WLWindow* window, uint64_t surface_id, int x, int y) { in com_wl_create_tile() argument
370 WLDisplay* display = window->display; in com_wl_create_tile()
372 assert(window->surfaces.count(surface_id) == 1); in com_wl_create_tile()
373 Surface* surface = &window->surfaces.at(surface_id); in com_wl_create_tile()
390 wl_compositor_create_region(window->display->compositor); in com_wl_create_tile()
398 tile->egl_surface = eglCreateWindowSurface(window->eglDisplay, window->config, in com_wl_create_tile()
405 static void show_tile(WLWindow* window, Tile* tile) { in show_tile() argument
412 window->display->subcompositor, tile->surface, window->surface); in show_tile()
415 Surface* surface = &window->surfaces.at(tile->surface_id); in show_tile()
428 static void hide_tile(WLWindow* window, Tile* tile) { in hide_tile() argument
438 wl_subsurface_set_position(tile->subsurface, window->geometry.width / 2, in hide_tile()
439 window->geometry.height / 2); in hide_tile()
443 wl_subsurface_place_below(tile->subsurface, window->surface); in hide_tile()
445 window->hiddenTiles.push_back(tile); in hide_tile()
448 void com_wl_destroy_tile(WLWindow* window, uint64_t surface_id, int x, int y) { in com_wl_destroy_tile() argument
449 assert(window->surfaces.count(surface_id) == 1); in com_wl_destroy_tile()
451 Surface* surface = &window->surfaces.at(surface_id); in com_wl_destroy_tile()
456 hide_tile(window, tile); in com_wl_destroy_tile()
459 window->destroyedTiles.push_back(tile); in com_wl_destroy_tile()
463 void com_wl_destroy_surface(WLWindow* window, uint64_t surface_id) { in com_wl_destroy_surface() argument
464 assert(window->surfaces.count(surface_id) == 1); in com_wl_destroy_surface()
466 Surface* surface = &window->surfaces.at(surface_id); in com_wl_destroy_surface()
471 com_wl_destroy_tile(window, surface_id, tile->x, tile->y); in com_wl_destroy_surface()
474 window->surfaces.erase(surface_id); in com_wl_destroy_surface()
477 void com_wl_destroy_window(WLWindow* window) { in com_wl_destroy_window() argument
478 for (auto surface_it = window->surfaces.begin(); in com_wl_destroy_window()
479 surface_it != window->surfaces.end(); ++surface_it) { in com_wl_destroy_window()
482 com_wl_destroy_surface(window, surface.id); in com_wl_destroy_window()
485 if (window->egl_surface != EGL_NO_SURFACE) { in com_wl_destroy_window()
486 eglDestroySurface(window->eglDisplay, window->egl_surface); in com_wl_destroy_window()
488 eglDestroyContext(window->eglDisplay, window->eglContext); in com_wl_destroy_window()
489 eglTerminate(window->eglDisplay); in com_wl_destroy_window()
491 delete window; in com_wl_destroy_window()
495 GLuint com_wl_bind_surface(WLWindow* window, uint64_t surface_id, int tile_x, in com_wl_bind_surface() argument
502 assert(window->surfaces.count(surface_id) == 1); in com_wl_bind_surface()
503 Surface* surface = &window->surfaces[surface_id]; in com_wl_bind_surface()
514 EGLBoolean ok = eglMakeCurrent(window->eglDisplay, tile->egl_surface, in com_wl_bind_surface()
515 tile->egl_surface, window->eglContext); in com_wl_bind_surface()
522 void com_wl_unbind_surface(WLWindow* window) { in com_wl_unbind_surface() argument
523 eglMakeCurrent(window->eglDisplay, EGL_NO_SURFACE, EGL_NO_SURFACE, in com_wl_unbind_surface()
524 window->eglContext); in com_wl_unbind_surface()
531 void com_wl_add_surface(WLWindow* window, uint64_t surface_id, int offset_x, in com_wl_add_surface() argument
534 Surface* surface = &window->surfaces[surface_id]; in com_wl_add_surface()
535 window->currentLayers.push_back(surface_id); in com_wl_add_surface()
550 view_w = MIN(window->geometry.width - pos_x, view_w); in com_wl_add_surface()
551 view_h = MIN(window->geometry.height - pos_y, view_h); in com_wl_add_surface()
554 show_tile(window, tile); in com_wl_add_surface()
564 hide_tile(window, tile); in com_wl_add_surface()
569 void com_wl_end_transaction(WLWindow* window) { in com_wl_end_transaction() argument
570 bool same = window->prevLayers == window->currentLayers; in com_wl_end_transaction()
572 struct wl_surface* prev_surface = window->surface; in com_wl_end_transaction()
574 for (auto it = window->currentLayers.begin(); in com_wl_end_transaction()
575 it != window->currentLayers.end(); ++it) { in com_wl_end_transaction()
576 Surface* surface = &window->surfaces[*it]; in com_wl_end_transaction()
595 window->prevLayers.swap(window->currentLayers); in com_wl_end_transaction()
596 window->currentLayers.clear(); in com_wl_end_transaction()
620 void com_wl_deinit(WLWindow* window) { UNUSED(window); } in com_wl_deinit() argument
625 WLWindow* window = (WLWindow*)data; in handle_xdg_surface_configure() local
629 if (window->wait_for_configure) { in handle_xdg_surface_configure()
630 if (window->enable_compositor) { in handle_xdg_surface_configure()
631 int width = window->geometry.width; in handle_xdg_surface_configure()
632 int height = window->geometry.height; in handle_xdg_surface_configure()
634 window->egl_window = wl_egl_window_create(window->surface, 1, 1); in handle_xdg_surface_configure()
635 window->egl_surface = eglCreateWindowSurface( in handle_xdg_surface_configure()
636 window->eglDisplay, window->config, window->egl_window, NULL); in handle_xdg_surface_configure()
637 assert(window->egl_surface != EGL_NO_SURFACE); in handle_xdg_surface_configure()
639 EGLBoolean ok = eglMakeCurrent(window->eglDisplay, window->egl_surface, in handle_xdg_surface_configure()
640 window->egl_surface, window->eglContext); in handle_xdg_surface_configure()
646 window->viewport = wp_viewporter_get_viewport(window->display->viewporter, in handle_xdg_surface_configure()
647 window->surface); in handle_xdg_surface_configure()
648 wp_viewport_set_destination(window->viewport, width, height); in handle_xdg_surface_configure()
650 eglSwapBuffers(window->eglDisplay, window->egl_surface); in handle_xdg_surface_configure()
652 window->egl_window = wl_egl_window_create( in handle_xdg_surface_configure()
653 window->surface, window->geometry.width, window->geometry.height); in handle_xdg_surface_configure()
654 window->egl_surface = eglCreateWindowSurface( in handle_xdg_surface_configure()
655 window->eglDisplay, window->config, window->egl_window, NULL); in handle_xdg_surface_configure()
656 assert(window->egl_surface != EGL_NO_SURFACE); in handle_xdg_surface_configure()
658 EGLBoolean ok = eglMakeCurrent(window->eglDisplay, window->egl_surface, in handle_xdg_surface_configure()
659 window->egl_surface, window->eglContext); in handle_xdg_surface_configure()
664 window->wait_for_configure = false; in handle_xdg_surface_configure()
674 WLWindow* window = (WLWindow*)data; in handle_xdg_toplevel_configure() local
679 window->geometry.width = width; in handle_xdg_toplevel_configure()
680 window->geometry.height = height; in handle_xdg_toplevel_configure()
682 if (!window->wait_for_configure) { in handle_xdg_toplevel_configure()
683 if (window->enable_compositor) { in handle_xdg_toplevel_configure()
684 wp_viewport_set_destination(window->viewport, window->geometry.width, in handle_xdg_toplevel_configure()
685 window->geometry.height); in handle_xdg_toplevel_configure()
687 wl_egl_window_resize(window->egl_window, window->geometry.width, in handle_xdg_toplevel_configure()
688 window->geometry.height, 0, 0); in handle_xdg_toplevel_configure()
697 WLWindow* window = (WLWindow*)data; in handle_xdg_toplevel_close() local
698 window->closed = true; in handle_xdg_toplevel_close()
748 static void init_wl_registry(WLWindow* window) { in init_wl_registry() argument
749 WLDisplay* display = window->display; in init_wl_registry()
761 static void init_xdg_window(WLWindow* window) { in init_xdg_window() argument
762 window->xdg_surface = in init_xdg_window()
763 xdg_wm_base_get_xdg_surface(window->display->wm_base, window->surface); in init_xdg_window()
764 assert(window->xdg_surface); in init_xdg_window()
765 xdg_surface_add_listener(window->xdg_surface, &xdg_surface_listener, window); in init_xdg_window()
767 window->xdg_toplevel = xdg_surface_get_toplevel(window->xdg_surface); in init_xdg_window()
768 xdg_toplevel_add_listener(window->xdg_toplevel, &xdg_toplevel_listener, in init_xdg_window()
769 window); in init_xdg_window()
770 assert(window->xdg_toplevel); in init_xdg_window()