From 681f7cec7283d9ab12cfdf28af9376af93dcc778 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pa=CC=84vels=20Nadtoc=CC=8Cajevs?= <7645683+bruvzg@users.noreply.github.com> Date: Thu, 11 Jun 2026 08:29:28 +0300 Subject: [PATCH] [MenuBar] Fix popup scale handling. --- scene/gui/menu_bar.cpp | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/scene/gui/menu_bar.cpp b/scene/gui/menu_bar.cpp index d882d30d0f..14b888a531 100644 --- a/scene/gui/menu_bar.cpp +++ b/scene/gui/menu_bar.cpp @@ -132,18 +132,24 @@ void MenuBar::_open_popup(int p_index, bool p_focus_item) { } Rect2 item_rect = _get_menu_item_rect(p_index); - Size2 canvas_scale = get_canvas_transform().get_scale(); - Point2 screen_pos = get_screen_position() + item_rect.position * canvas_scale; - Size2 screen_size = item_rect.size * canvas_scale; + item_rect.position *= get_screen_transform().get_scale(); + item_rect.size *= get_screen_transform().get_scale(); + + Rect2 rect = get_screen_rect(); + rect.position.x += item_rect.position.x; + rect.position.y += rect.size.height; + if (get_viewport()->is_embedding_subwindows() && pm->get_force_native()) { + Transform2D xform = get_viewport()->get_popup_base_transform_native(); + rect = xform.xform(rect); + } active_menu = p_index; - pm->set_size(Size2(screen_size.x, 0)); - screen_pos.y += screen_size.y; + pm->set_size(Size2(item_rect.size.x, 0)); if (is_layout_rtl()) { - screen_pos.x += screen_size.x - pm->get_size().width; + rect.position.x += rect.size.width - pm->get_size().width; } - pm->set_position(screen_pos); + pm->set_position(rect.position); pm->popup(); if (p_focus_item) {