Modules/Graphics
Шурупов Илья Викторович 67a86dea2d Use the whole window in the studio layout
The window now extends into the display cutout and the top bars sit at
the top edge with the gap fixed at the screen center. Top buttons are at
most 0.8 of the bottom bar buttons. The cutout query is removed again.
2026-10-18 22:24:25 +03:00
..
examples Port rendering stack from OpenGL to Vulkan 2026-10-13 03:04:08 +03:00
private Use the whole window in the studio layout 2026-10-18 22:24:25 +03:00
public Use the whole window in the studio layout 2026-10-18 22:24:25 +03:00
rsc 3D Editor treaks 2024-11-24 22:41:15 +03:00
tests Recognize quick multi-finger taps 2026-10-17 11:13:20 +03:00
CMakeLists.txt Turn two-finger touches into pan, pinch and rotate gestures 2026-10-17 09:19:48 +03:00
README.md Replace GLFW with a native Wayland window backend 2026-10-14 22:35:53 +03:00

Graphics

Native Wayland window, Vulkan presentation, nanovg canvas and ImGui debug UI. Wayland is the only supported platform.

Window backend

  • WaylandConnection binds the globals: xdg_wm_base, wl_seat, wl_data_device_manager, wp_viewporter, wp_fractional_scale_v1, wp_cursor_shape_v1, zwp_text_input_v3 and xdg-decoration.
  • WaylandWindow owns the surface and toplevel, applies configures (size, maximized, tiled, activated), fractional scale through a viewport, the window geometry and input region, and starts compositor move/resize.
  • WaylandSeat handles pointer (cursor shapes, wheel), keyboard (xkbcommon keymap, compose, key repeat through a timerfd in the same poll), clipboard (text/plain;charset=utf-8) and IME commits from text-input-v3.
  • WindowFrame is the pure geometry of the client-side frame: shadow margin, content rect, input region and edge hit-testing. It is unit-tested.
  • WindowInputDispatcher turns backend input into EventHandler events and forwards it to observers such as ImGuiPlatform, which feeds ImGui IO.

Frame

The surface is the content plus a transparent shadow margin. Each frame draws the UI in content coordinates, then ImGui, then a separate nanovg pass that cuts the rounded corners, strokes the outline and paints the shadow behind the content. The swapchain uses premultiplied alpha when the surface supports it.

Tests

TestGraphics covers frame geometry and key mapping without a display.