feat: updated engine version to 4.4
This commit is contained in:
parent
d08586768d
commit
ba58baf432
140 changed files with 108317 additions and 14666 deletions
|
|
@ -95,9 +95,11 @@ void EmbeddedProcess::set_keep_aspect(bool p_keep_aspect) {
|
|||
}
|
||||
}
|
||||
|
||||
Rect2i EmbeddedProcess::_get_global_embedded_window_rect() {
|
||||
Rect2i control_rect = get_global_rect();
|
||||
control_rect = Rect2i(control_rect.position + margin_top_left, (control_rect.size - get_margins_size()).maxi(1));
|
||||
Rect2i EmbeddedProcess::get_adjusted_embedded_window_rect(Rect2i p_rect) {
|
||||
Rect2i control_rect = Rect2i(p_rect.position + margin_top_left, (p_rect.size - get_margins_size()).maxi(1));
|
||||
if (window) {
|
||||
control_rect.position += window->get_position();
|
||||
}
|
||||
if (window_size != Size2i()) {
|
||||
Rect2i desired_rect = Rect2i();
|
||||
if (!keep_aspect && control_rect.size.x >= window_size.x && control_rect.size.y >= window_size.y) {
|
||||
|
|
@ -116,12 +118,7 @@ Rect2i EmbeddedProcess::_get_global_embedded_window_rect() {
|
|||
}
|
||||
|
||||
Rect2i EmbeddedProcess::get_screen_embedded_window_rect() {
|
||||
Rect2i rect = _get_global_embedded_window_rect();
|
||||
if (window) {
|
||||
rect.position += window->get_position();
|
||||
}
|
||||
|
||||
return rect;
|
||||
return get_adjusted_embedded_window_rect(get_global_rect());
|
||||
}
|
||||
|
||||
int EmbeddedProcess::get_margin_size(Side p_side) const {
|
||||
|
|
@ -321,10 +318,15 @@ void EmbeddedProcess::_check_mouse_over() {
|
|||
return;
|
||||
}
|
||||
|
||||
// When there's a modal window, we don't want to grab the focus to prevent
|
||||
// the game window to go in front of the modal window.
|
||||
if (_get_current_modal_window()) {
|
||||
return;
|
||||
// Check if there's an exclusive popup, an open menu, or a tooltip.
|
||||
// We don't want to grab focus to prevent the game window from coming to the front of the modal window
|
||||
// or the open menu from closing when the mouse cursor moves outside the menu and over the embedded game.
|
||||
Vector<DisplayServer::WindowID> wl = DisplayServer::get_singleton()->get_window_list();
|
||||
for (const DisplayServer::WindowID &window_id : wl) {
|
||||
Window *w = Window::get_from_id(window_id);
|
||||
if (w && (w->is_exclusive() || w->get_flag(Window::FLAG_POPUP))) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
// Force "regrabbing" the game window focus.
|
||||
|
|
|
|||
|
|
@ -83,6 +83,7 @@ public:
|
|||
void set_keep_aspect(bool p_keep_aspect);
|
||||
void queue_update_embedded_process();
|
||||
|
||||
Rect2i get_adjusted_embedded_window_rect(Rect2i p_rect);
|
||||
Rect2i get_screen_embedded_window_rect();
|
||||
int get_margin_size(Side p_side) const;
|
||||
Size2 get_margins_size();
|
||||
|
|
|
|||
|
|
@ -257,7 +257,7 @@ void GameView::_show_update_window_wrapper() {
|
|||
Point2 offset_embedded_process = embedded_process->get_global_position() - get_global_position();
|
||||
|
||||
// On the first startup, the global position of the embedded process control is invalid because it was
|
||||
// never displayed. We will calculated it manually using the minimum size of the window.
|
||||
// never displayed. We will calculate it manually using the minimum size of the window.
|
||||
if (offset_embedded_process == Point2()) {
|
||||
offset_embedded_process.y = wrapped_min_size.y;
|
||||
}
|
||||
|
|
@ -812,10 +812,27 @@ void GameView::_update_arguments_for_instance(int p_idx, List<String> &r_argumen
|
|||
_update_embed_window_size();
|
||||
Rect2i rect = embedded_process->get_screen_embedded_window_rect();
|
||||
|
||||
// Usually, the global rect of the embedded process control is invalid because it was hidden. We will calculate it manually.
|
||||
if (!window_wrapper->get_window_enabled()) {
|
||||
Size2 old_min_size = embedded_process->get_custom_minimum_size();
|
||||
embedded_process->set_custom_minimum_size(Size2i());
|
||||
|
||||
Control *container = EditorNode::get_singleton()->get_editor_main_screen()->get_control();
|
||||
rect = container->get_global_rect();
|
||||
|
||||
Size2 wrapped_min_size = window_wrapper->get_minimum_size();
|
||||
rect.position.y += wrapped_min_size.y;
|
||||
rect.size.y -= wrapped_min_size.y;
|
||||
|
||||
rect = embedded_process->get_adjusted_embedded_window_rect(rect);
|
||||
|
||||
embedded_process->set_custom_minimum_size(old_min_size);
|
||||
}
|
||||
|
||||
// When using the floating window, we need to force the position and size from the
|
||||
// editor/project settings, because the get_screen_embedded_window_rect of the
|
||||
// embedded_process will be updated only on the next frame.
|
||||
if (p_idx == 0 && window_wrapper->get_window_enabled()) {
|
||||
if (window_wrapper->get_window_enabled()) {
|
||||
EditorRun::WindowPlacement placement = EditorRun::get_window_placement();
|
||||
if (placement.position != Point2i(INT_MAX, INT_MAX)) {
|
||||
rect.position = placement.position;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue