108 lines
3.1 KiB
GDScript
108 lines
3.1 KiB
GDScript
|
|
# Editor-specific utilities.
|
|
# This script cannot be loaded in an exported game.
|
|
|
|
tool
|
|
|
|
# TODO There is no script API to access editor scale
|
|
# Ported from https://github.com/godotengine/godot/blob/
|
|
# 5fede4a81c67961c6fb2309b9b0ceb753d143566/editor/editor_node.cpp#L5515-L5554
|
|
static func get_dpi_scale(editor_settings: EditorSettings) -> float:
|
|
var display_scale = editor_settings.get("interface/editor/display_scale")
|
|
var custom_display_scale = editor_settings.get("interface/editor/custom_display_scale")
|
|
var edscale := 0.0
|
|
|
|
match display_scale:
|
|
0:
|
|
# Try applying a suitable display scale automatically
|
|
var screen = OS.current_screen
|
|
var large = OS.get_screen_dpi(screen) >= 192 and OS.get_screen_size(screen).x > 2000
|
|
edscale = 2.0 if large else 1.0
|
|
1:
|
|
edscale = 0.75
|
|
2:
|
|
edscale = 1.0
|
|
3:
|
|
edscale = 1.25
|
|
4:
|
|
edscale = 1.5
|
|
5:
|
|
edscale = 1.75
|
|
6:
|
|
edscale = 2.0
|
|
_:
|
|
edscale = custom_display_scale
|
|
|
|
return edscale
|
|
|
|
|
|
# This is normally an `EditorFileDialog`. I can't type-hint this one properly,
|
|
# because when I test UI in isolation, I can't use `EditorFileDialog`.
|
|
static func create_open_file_dialog() -> ConfirmationDialog:
|
|
var d
|
|
if Engine.editor_hint:
|
|
d = EditorFileDialog.new()
|
|
d.mode = EditorFileDialog.MODE_OPEN_FILE
|
|
d.access = EditorFileDialog.ACCESS_RESOURCES
|
|
else:
|
|
# Duh. I need to be able to test it.
|
|
d = FileDialog.new()
|
|
d.mode = FileDialog.MODE_OPEN_FILE
|
|
d.access = FileDialog.ACCESS_RESOURCES
|
|
d.resizable = true
|
|
return d
|
|
|
|
|
|
static func create_open_dir_dialog() -> ConfirmationDialog:
|
|
var d
|
|
if Engine.editor_hint:
|
|
d = EditorFileDialog.new()
|
|
d.mode = EditorFileDialog.MODE_OPEN_DIR
|
|
d.access = EditorFileDialog.ACCESS_RESOURCES
|
|
else:
|
|
# Duh. I need to be able to test it.
|
|
d = FileDialog.new()
|
|
d.mode = FileDialog.MODE_OPEN_DIR
|
|
d.access = FileDialog.ACCESS_RESOURCES
|
|
d.resizable = true
|
|
return d
|
|
|
|
|
|
# If you want to open using Image.load()
|
|
static func create_open_image_dialog() -> ConfirmationDialog:
|
|
var d = create_open_file_dialog()
|
|
_add_image_filters(d)
|
|
return d
|
|
|
|
|
|
# If you want to open using load(),
|
|
# although it might still fail if the file is imported as Image...
|
|
static func create_open_texture_dialog() -> ConfirmationDialog:
|
|
var d = create_open_file_dialog()
|
|
_add_texture_filters(d)
|
|
return d
|
|
|
|
|
|
static func create_open_texture_array_dialog() -> ConfirmationDialog:
|
|
var d = create_open_file_dialog()
|
|
_add_texture_array_filters(d)
|
|
return d
|
|
|
|
# TODO Post a proposal, we need a file dialog filtering on resource types, not on file extensions!
|
|
|
|
static func _add_image_filters(file_dialog):
|
|
file_dialog.add_filter("*.png ; PNG files")
|
|
file_dialog.add_filter("*.jpg ; JPG files")
|
|
#file_dialog.add_filter("*.exr ; EXR files")
|
|
|
|
|
|
static func _add_texture_filters(file_dialog):
|
|
_add_image_filters(file_dialog)
|
|
file_dialog.add_filter("*.stex ; StreamTexture files")
|
|
file_dialog.add_filter("*.packed_tex ; HTerrainPackedTexture files")
|
|
|
|
|
|
static func _add_texture_array_filters(file_dialog):
|
|
_add_image_filters(file_dialog)
|
|
file_dialog.add_filter("*.texarr ; TextureArray files")
|
|
file_dialog.add_filter("*.packed_texarr ; HTerrainPackedTextureArray files")
|