69 lines
2.3 KiB
GDScript
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)
|