Wrong position after changing resolution in Fullscreen&ExclusiveFullscreen

Godot Version

4.3

Question

Hello :v:
After changing the resolution ingame, the content appears in the top-left corner.
This only happens in Fullscreen and ExclusiceFullscreen Mode.
In Window mode, everything just works fine fine.
Here is the Script:

const set_resolution_list: Array = [
	{ "name": "640 x 360 / 16:9", "resolution": Vector2i(640, 360) },
	{ "name": "640 x 400 / 16:10", "resolution": Vector2i(640, 400) },
	{ "name": "768 x 432 / 16:9", "resolution": Vector2i(768, 432) },
	{ "name": "800 x 600 / 4:3", "resolution": Vector2i(800, 600) }
]

func _ready() -> void:
	$Menus/HBoxContainer/SubMenus/SizeMenu/SizeLayout/ResolutionPopUp.connect("item_selected", Callable(self, "_on_Resolution_item_selected"))

func _on_Resolution_item_selected(index: int) -> void:
	var current_screen_index = DisplayServer.window_get_current_screen()
	var desktop_resolution = DisplayServer.screen_get_size(current_screen_index)
	var resolution = set_resolution_list[index]["resolution"]
	var sizefactor: int = int(round(desktop_resolution.y) / round(resolution.y))
	if DisplayServer.window_get_mode() == DisplayServer.WINDOW_MODE_FULLSCREEN:
		get_window().set_size(resolution - Vector2i(2, 2))
		get_window().content_scale_size = resolution - Vector2i(2, 2)
	else:
		get_window().set_size(resolution)
		get_window().content_scale_size = resolution
	if DisplayServer.window_get_mode() == DisplayServer.WINDOW_MODE_EXCLUSIVE_FULLSCREEN:
		get_window().size = resolution * sizefactor
	elif DisplayServer.window_get_mode() == DisplayServer.WINDOW_MODE_FULLSCREEN:
		get_window().size = (resolution * sizefactor) - Vector2i(2, 2)
		print((resolution * sizefactor) - Vector2i(2, 2))
	elif DisplayServer.window_get_mode() == DisplayServer.WINDOW_MODE_WINDOWED:
		get_window().size = resolution * clamp(sizefactor - 1, 1, 12)
	var screen_center = DisplayServer.screen_get_position() + DisplayServer.screen_get_size() / 2
	var window_size = get_window().get_size_with_decorations()
	get_window().set_position(screen_center - window_size / 2)

How can i control the position of my content?
If i use the same settings via Project Settings, everything is perfectly in the middle of the screen…

Thx for help :sweat_smile:

Try set your project settings like this:

This are my regular project settings:


I tried it with “Aspect = Expand” settings, but got the same result.

Hey have you figured out the reason why this is happening?? I’m in a similar situation too.

The layouting properties of your controls need to be set properly. For start, is your top level control set to cover the full viewport rect?

Yeah I’ve done everything. I went through docs. I think everything should be placed inside a sub-viewport and it’s size should be changed as well when you change the resolution from settings menu.

Whereever you are changing your resolution, write this code below it. It fixed the black bar issue in exclusive full screen for me.

get_tree().root.size.x = DisplayServer.screen_get_size().x
get_tree().root.size.y = DisplayServer.screen_get_size().y