1
0
mirror of https://github.com/godotengine/godot.git synced 2025-12-30 18:30:54 +00:00

Merge pull request #113656 from deralmas/gray-goo-scenario

Wayland: Work around window scale ambiguity
This commit is contained in:
Rémi Verschelde
2025-12-16 11:26:42 +01:00
7 changed files with 37 additions and 2 deletions

View File

@@ -1228,6 +1228,15 @@ Size2i DisplayServerWayland::window_get_size_with_decorations(DisplayServer::Win
return windows[p_window_id].rect.size;
}
float DisplayServerWayland::window_get_scale(WindowID p_window_id) const {
MutexLock mutex_lock(wayland_thread.mutex);
const WaylandThread::WindowState *ws = wayland_thread.window_get_state(p_window_id);
ERR_FAIL_NULL_V(ws, 1);
return wayland_thread.window_state_get_scale_factor(ws);
}
void DisplayServerWayland::window_set_mode(WindowMode p_mode, DisplayServer::WindowID p_window_id) {
MutexLock mutex_lock(wayland_thread.mutex);

View File

@@ -290,6 +290,8 @@ public:
virtual Size2i window_get_size(WindowID p_window_id = MAIN_WINDOW_ID) const override;
virtual Size2i window_get_size_with_decorations(WindowID p_window_id = MAIN_WINDOW_ID) const override;
virtual float window_get_scale(WindowID p_window_id = MAIN_WINDOW_ID) const override;
virtual void window_set_mode(WindowMode p_mode, WindowID p_window_id = MAIN_WINDOW_ID) override;
virtual WindowMode window_get_mode(WindowID p_window_id = MAIN_WINDOW_ID) const override;

View File

@@ -3435,7 +3435,7 @@ int WaylandThread::window_state_get_preferred_buffer_scale(WindowState *p_ws) {
return max_size;
}
double WaylandThread::window_state_get_scale_factor(WindowState *p_ws) {
double WaylandThread::window_state_get_scale_factor(const WindowState *p_ws) {
ERR_FAIL_NULL_V(p_ws, 1);
if (p_ws->fractional_scale > 0) {
@@ -3972,6 +3972,10 @@ WaylandThread::WindowState *WaylandThread::window_get_state(DisplayServer::Windo
return windows.getptr(p_window_id);
}
const WaylandThread::WindowState *WaylandThread::window_get_state(DisplayServer::WindowID p_window_id) const {
return windows.getptr(p_window_id);
}
void WaylandThread::beep() const {
if (registry.xdg_system_bell) {
xdg_system_bell_v1_ring(registry.xdg_system_bell, nullptr);

View File

@@ -1079,7 +1079,7 @@ public:
void seat_state_echo_keys(SeatState *p_ss);
static int window_state_get_preferred_buffer_scale(WindowState *p_ws);
static double window_state_get_scale_factor(WindowState *p_ws);
static double window_state_get_scale_factor(const WindowState *p_ws);
static void window_state_update_size(WindowState *p_ws, int p_width, int p_height);
static Vector2i scale_vector2i(const Vector2i &p_vector, double p_amount);
@@ -1100,6 +1100,7 @@ public:
struct wl_surface *window_get_wl_surface(DisplayServer::WindowID p_window_id) const;
WindowState *window_get_state(DisplayServer::WindowID p_window_id);
const WindowState *window_get_state(DisplayServer::WindowID p_window_id) const;
void window_start_resize(DisplayServer::WindowResizeEdge p_edge, DisplayServer::WindowID p_window);