Skip to content

Instantly share code, notes, and snippets.

@naithar
Last active March 18, 2023 14:38
Show Gist options
  • Save naithar/01fa04248956c39a06b7b061b19be83f to your computer and use it in GitHub Desktop.
Save naithar/01fa04248956c39a06b7b061b19be83f to your computer and use it in GitHub Desktop.
Godot iOS Safe Area
extends MarginContainer
onready var viewport = get_viewport()
onready var screen_size = viewport.get_visible_rect().size
func _ready():
viewport.connect("size_changed", self, "resize_window")
update_safe_area()
func resize_window():
var new_size = viewport.get_visible_rect().size
if new_size.x != screen_size.x or new_size.y != screen_size.y:
screen_size = new_size
update_safe_area()
func update_safe_area():
var rect = OS.get_window_safe_area()
var window_size = OS.get_window_size()
var offset = Vector2(
window_size.x - rect.size.x - rect.position.x,
window_size.y - rect.size.y - rect.position.y
)
var aspect_y = screen_size.y / window_size.y
var aspect_x = screen_size.x / window_size.x
var topLeft = Vector2(rect.position.x * aspect_x, rect.position.y * aspect_y)
var bottomRight = Vector2(-offset.x * aspect_x, -offset.y * aspect_y)
margin_left = topLeft.x
margin_top = topLeft.y
margin_right = bottomRight.x
margin_bottom = bottomRight.y
func _update(delta):
var rect = OS.get_window_safe_area()
var screen_size = OS.get_window_size()
var view_size = get_size()
var aspect_y = view_size.y / screen_size.y
var aspect_x = view_size.x / screen_size.x
$Panel.set_position(Vector2(rect.position.x * aspect_x, rect.position.y * aspect_y))
$Panel.set_size(Vector2(rect.size.x * aspect_x, rect.size.y * aspect_y))
func _update(delta):
var rect = DisplayServer.screen_get_usable_rect()
var screen_size = DisplayServer.screen_get_size()
var view_size = get_size()
var aspect_y = view_size.y / screen_size.y
var aspect_x = view_size.x / screen_size.x
$Panel.set_position(Vector2(rect.position.x * aspect_x, rect.position.y * aspect_y))
$Panel.set_size(Vector2(rect.size.x * aspect_x, rect.size.y * aspect_y))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment