MagicNStuff/source/addons/panku_console/modules/general_settings/module.gd
2025-02-25 22:07:11 +01:00

69 lines
2.3 KiB
GDScript

class_name PankuModuleGeneralSettings extends PankuModule
var window:PankuLynxWindow
func open_settings_window():
if window: return
# create a new exporter window
window = core.create_data_controller_window.call(
core.module_manager.get_module_option_objects()
)
window.set_window_title_text("General Settings")
load_window_data(window)
window.show_window()
window.window_closed.connect(
func():
save_window_data(window)
window = null
)
# Taken from https://github.com/godotengine/godot/blob/master/editor/editor_settings.cpp#L1539
static func get_auto_display_scale() -> float:
var flag := false
match OS.get_name():
"macOS":
flag = true
"Linux", "FreeBSD", "NetBSD", "OpenBSD", "BSD":
if DisplayServer.get_name() == "Wayland":
flag = true
"Android":
flag = true
"iOS":
flag = true
if flag:
return DisplayServer.screen_get_max_scale()
var screen := DisplayServer.window_get_current_screen()
if (DisplayServer.screen_get_size(screen) == Vector2i()):
# Invalid screen size, skip.
return 1.0
# Use the smallest dimension to use a correct display scale on portrait displays.
var smallest_dimension = min(DisplayServer.screen_get_size().x, DisplayServer.screen_get_size().y)
if DisplayServer.screen_get_dpi(screen) >= 192 and smallest_dimension >= 1400:
# hiDPI display.
return 2.0
elif smallest_dimension >= 1700:
# Likely a hiDPI display, but we aren't certain due to the returned DPI.
# Use an intermediate scale to handle this situation.
return 1.5
elif smallest_dimension <= 800:
# Small loDPI display. Use a smaller display scale so that editor elements fit more easily.
# Icons won't look great, but this is better than having editor elements overflow from its window.
return 0.75
return 1.0
func init_module():
# load settings
get_module_opt().window_blur_effect = load_module_data("window_blur_effect", true)
get_module_opt().window_base_color = load_module_data("window_base_color", Color("#000c1880"))
get_module_opt().enable_os_window = load_module_data("enable_os_window", false)
get_module_opt().os_window_bg_color = load_module_data("os_window_bg_color", Color(0, 0, 0, 0))
get_module_opt().global_font_size = load_module_data("global_font_size", int(16 * get_auto_display_scale()))
func quit_module():
super.quit_module()
if window:
save_window_data(window)