fix infinite recursion and focus management issues in video settings
This commit is contained in:
parent
edc1603fe5
commit
5673f44b2d
|
|
@ -1,47 +1,47 @@
|
||||||
extends VBoxContainer
|
extends VBoxContainer
|
||||||
|
|
||||||
|
# This is a hack so values changing to the default to not create a recursion.
|
||||||
signal changed
|
signal changed
|
||||||
signal leave_stage
|
signal leave_stage
|
||||||
|
|
||||||
var has_stage:bool = false:
|
var has_stage:bool = false:
|
||||||
set(stage):
|
set(stage):
|
||||||
has_stage = stage
|
has_stage = stage
|
||||||
preset_selected = preset_selected
|
|
||||||
|
|
||||||
@export_file(".json") var settings_path = "user://video_settings.json"
|
|
||||||
|
|
||||||
@export_enum("None", "Performance", "Balanced", "Quality") var preset_selected:int = 2:
|
|
||||||
set(value):
|
|
||||||
preset_selected = value
|
|
||||||
if has_stage:
|
|
||||||
match preset_selected:
|
match preset_selected:
|
||||||
1: %PerformancePreset.grab_focus()
|
1: %PerformancePreset.grab_focus()
|
||||||
2: %BalancedPreset.grab_focus()
|
2: %BalancedPreset.grab_focus()
|
||||||
3: %QualityPreset.grab_focus()
|
3: %QualityPreset.grab_focus()
|
||||||
_: %FullscreenMode.grab_focus()
|
_: %FullscreenMode.grab_focus()
|
||||||
|
|
||||||
|
@export_file(".json") var settings_path = "user://video_settings.json"
|
||||||
|
|
||||||
|
@export_enum("None", "Performance", "Balanced", "Quality") var preset_selected:int = 2:
|
||||||
|
set(value):
|
||||||
|
# this may not call changed!
|
||||||
|
preset_selected = value
|
||||||
|
|
||||||
@export var window_mode: DisplayServer.WindowMode = DisplayServer.WindowMode.WINDOW_MODE_FULLSCREEN:
|
@export var window_mode: DisplayServer.WindowMode = DisplayServer.WindowMode.WINDOW_MODE_FULLSCREEN:
|
||||||
set(value):
|
set(value):
|
||||||
window_mode = value
|
window_mode = value
|
||||||
changed.emit()
|
if not ignore_changes: changed.emit()
|
||||||
@onready var fullscreen_selector: OptionButton = %FullscreenMode
|
@onready var fullscreen_selector: OptionButton = %FullscreenMode
|
||||||
|
|
||||||
@export_range(0.5, 2) var render_scale: float = 1:
|
@export_range(0.5, 2) var render_scale: float = 1:
|
||||||
set(value):
|
set(value):
|
||||||
render_scale = value
|
render_scale = value
|
||||||
changed.emit()
|
if not ignore_changes: changed.emit()
|
||||||
@onready var scale_selector: SpinBox = %RenderScale
|
@onready var scale_selector: SpinBox = %RenderScale
|
||||||
|
|
||||||
@export var upscale_mode: RenderingServer.ViewportScaling3DMode = RenderingServer.ViewportScaling3DMode.VIEWPORT_SCALING_3D_MODE_BILINEAR :
|
@export var upscale_mode: RenderingServer.ViewportScaling3DMode = RenderingServer.ViewportScaling3DMode.VIEWPORT_SCALING_3D_MODE_BILINEAR :
|
||||||
set(value):
|
set(value):
|
||||||
upscale_mode = value
|
upscale_mode = value
|
||||||
changed.emit()
|
if not ignore_changes: changed.emit()
|
||||||
@onready var upscale_selector: OptionButton = %SuperResolution
|
@onready var upscale_selector: OptionButton = %SuperResolution
|
||||||
|
|
||||||
@export_range(30, 144) var max_fps: int = 60:
|
@export_range(30, 144) var max_fps: int = 60:
|
||||||
set(value):
|
set(value):
|
||||||
max_fps = value
|
max_fps = value
|
||||||
changed.emit()
|
if not ignore_changes: changed.emit()
|
||||||
@onready var fps_enabler: CheckBox = %EnableFps
|
@onready var fps_enabler: CheckBox = %EnableFps
|
||||||
var fps_enabled: bool:
|
var fps_enabled: bool:
|
||||||
set(value):
|
set(value):
|
||||||
|
|
@ -52,36 +52,38 @@ var fps_enabled: bool:
|
||||||
@export_enum("low", "medium", "high", "ultra") var lighting_quality: int = 3:
|
@export_enum("low", "medium", "high", "ultra") var lighting_quality: int = 3:
|
||||||
set(value):
|
set(value):
|
||||||
lighting_quality = value
|
lighting_quality = value
|
||||||
changed.emit()
|
if not ignore_changes: changed.emit()
|
||||||
@onready var lightning_selector: OptionButton = %LightingQuality
|
@onready var lightning_selector: OptionButton = %LightingQuality
|
||||||
|
|
||||||
@export_enum("low", "medium", "high") var shadow_quality: int = 3:
|
@export_enum("low", "medium", "high") var shadow_quality: int = 3:
|
||||||
set(value):
|
set(value):
|
||||||
shadow_quality = value
|
shadow_quality = value
|
||||||
changed.emit()
|
if not ignore_changes: changed.emit()
|
||||||
@onready var shadow_selector: OptionButton = %ShadowQuality
|
@onready var shadow_selector: OptionButton = %ShadowQuality
|
||||||
|
|
||||||
@export_enum("no", "1x", "2x", "4x", "8x") var texture_filtering:int = 3:
|
@export_enum("no", "1x", "2x", "4x", "8x") var texture_filtering:int = 3:
|
||||||
set(value):
|
set(value):
|
||||||
texture_filtering = value
|
texture_filtering = value
|
||||||
changed.emit()
|
if not ignore_changes: changed.emit()
|
||||||
@onready var texture_selector: OptionButton = %TextureFiltering
|
@onready var texture_selector: OptionButton = %TextureFiltering
|
||||||
|
|
||||||
@export_enum("no", "1x", "2x", "4x") var msaa = 0:
|
@export_enum("no", "1x", "2x", "4x") var msaa = 0:
|
||||||
set(value):
|
set(value):
|
||||||
msaa = value
|
msaa = value
|
||||||
changed.emit()
|
if not ignore_changes: changed.emit()
|
||||||
@onready var msaa_selector: OptionButton = %AntiAlaising
|
@onready var msaa_selector: OptionButton = %AntiAlaising
|
||||||
|
|
||||||
@export var vsync_mode: DisplayServer.VSyncMode = DisplayServer.VSyncMode.VSYNC_ENABLED:
|
@export var vsync_mode: DisplayServer.VSyncMode = DisplayServer.VSyncMode.VSYNC_ENABLED:
|
||||||
set(value):
|
set(value):
|
||||||
vsync_mode = value
|
vsync_mode = value
|
||||||
changed.emit()
|
if not ignore_changes: changed.emit()
|
||||||
@onready var vsync_selector: OptionButton = %vSync
|
@onready var vsync_selector: OptionButton = %vSync
|
||||||
|
|
||||||
|
var ignore_changes: bool = false
|
||||||
var has_changed: bool = false:
|
var has_changed: bool = false:
|
||||||
set(value):
|
set(value):
|
||||||
has_changed = value
|
has_changed = value
|
||||||
|
if not ignore_changes:
|
||||||
preset_selected = 0
|
preset_selected = 0
|
||||||
if has_changed:
|
if has_changed:
|
||||||
%ExitButton.text = "discard"
|
%ExitButton.text = "discard"
|
||||||
|
|
@ -114,6 +116,9 @@ func _ready() -> void:
|
||||||
%ConfirmExit.pressed.connect(_on_exit_confirmed)
|
%ConfirmExit.pressed.connect(_on_exit_confirmed)
|
||||||
%ConfirmSave.pressed.connect(_on_confirm_button_pressed)
|
%ConfirmSave.pressed.connect(_on_confirm_button_pressed)
|
||||||
%ConfirmAbort.pressed.connect($Popup.hide)
|
%ConfirmAbort.pressed.connect($Popup.hide)
|
||||||
|
%PerformancePreset.pressed.connect(_on_performance_preset_pressed)
|
||||||
|
%BalancedPreset.pressed.connect(_on_balanced_preset_pressed)
|
||||||
|
%QualityPreset.pressed.connect(_on_quality_preset_pressed)
|
||||||
|
|
||||||
func load_settings():
|
func load_settings():
|
||||||
|
|
||||||
|
|
@ -205,6 +210,9 @@ func _on_confirm_button_pressed() -> void:
|
||||||
save_settings()
|
save_settings()
|
||||||
|
|
||||||
func _on_performance_preset_pressed() -> void:
|
func _on_performance_preset_pressed() -> void:
|
||||||
|
ignore_changes = true
|
||||||
|
has_changed = true
|
||||||
|
|
||||||
render_scale = 0.8
|
render_scale = 0.8
|
||||||
max_fps = 60
|
max_fps = 60
|
||||||
fps_enabled = true
|
fps_enabled = true
|
||||||
|
|
@ -216,9 +224,15 @@ func _on_performance_preset_pressed() -> void:
|
||||||
|
|
||||||
propagate_settings()
|
propagate_settings()
|
||||||
|
|
||||||
|
changed.emit()
|
||||||
|
ignore_changes = false
|
||||||
|
|
||||||
preset_selected = 1
|
preset_selected = 1
|
||||||
|
|
||||||
func _on_balanced_preset_pressed() -> void:
|
func _on_balanced_preset_pressed() -> void:
|
||||||
|
ignore_changes = true
|
||||||
|
has_changed = true
|
||||||
|
|
||||||
render_scale = 1
|
render_scale = 1
|
||||||
max_fps = 60
|
max_fps = 60
|
||||||
fps_enabled = true
|
fps_enabled = true
|
||||||
|
|
@ -230,9 +244,15 @@ func _on_balanced_preset_pressed() -> void:
|
||||||
|
|
||||||
propagate_settings()
|
propagate_settings()
|
||||||
|
|
||||||
|
changed.emit()
|
||||||
|
ignore_changes = false
|
||||||
|
|
||||||
preset_selected = 2
|
preset_selected = 2
|
||||||
|
|
||||||
func _on_quality_preset_pressed() -> void:
|
func _on_quality_preset_pressed() -> void:
|
||||||
|
ignore_changes = true
|
||||||
|
has_changed = true
|
||||||
|
|
||||||
render_scale = 1
|
render_scale = 1
|
||||||
max_fps = 60
|
max_fps = 60
|
||||||
fps_enabled = false
|
fps_enabled = false
|
||||||
|
|
@ -244,6 +264,9 @@ func _on_quality_preset_pressed() -> void:
|
||||||
|
|
||||||
propagate_settings()
|
propagate_settings()
|
||||||
|
|
||||||
|
changed.emit()
|
||||||
|
ignore_changes = false
|
||||||
|
|
||||||
preset_selected = 3
|
preset_selected = 3
|
||||||
|
|
||||||
func window_mode_to_select_id(mode: DisplayServer.WindowMode) -> int:
|
func window_mode_to_select_id(mode: DisplayServer.WindowMode) -> int:
|
||||||
|
|
|
||||||
|
|
@ -44,37 +44,37 @@ func _ready() -> void:
|
||||||
|
|
||||||
func _input(event: InputEvent) -> void:
|
func _input(event: InputEvent) -> void:
|
||||||
if has_focus():
|
if has_focus():
|
||||||
if Input.is_action_just_pressed(\"ui_accept\"):
|
if event.is_action_pressed(\"ui_accept\"):
|
||||||
print(\"pressed!\")
|
|
||||||
print(pressed)
|
|
||||||
pressed = not pressed
|
pressed = not pressed
|
||||||
print(pressed)
|
|
||||||
get_viewport().set_input_as_handled()
|
get_viewport().set_input_as_handled()
|
||||||
|
|
||||||
if pressed:
|
if pressed:
|
||||||
|
grab_focus()
|
||||||
if Input.is_action_just_pressed(\"ui_up\") or Input.is_action_just_pressed(\"ui_right\"):
|
#
|
||||||
|
if event.is_action_pressed(\"ui_up\") or event.is_action_pressed(\"ui_right\"):
|
||||||
value += step
|
value += step
|
||||||
get_viewport().set_input_as_handled()
|
|
||||||
|
|
||||||
await(get_tree().create_timer(hold_down_delay).timeout)
|
call_deferred(\"check_input_held\", true)
|
||||||
|
|
||||||
while Input.is_action_pressed(\"ui_up\") or Input.is_action_pressed(\"ui_right\"):
|
elif event.is_action_pressed(\"ui_down\", true) or event.is_action_pressed(\"ui_left\", true):
|
||||||
value += step * repeat_multiplier
|
|
||||||
await(get_tree().create_timer(repeat_delay).timeout)
|
|
||||||
|
|
||||||
elif Input.is_action_just_pressed(\"ui_down\") or Input.is_action_just_pressed(\"ui_left\"):
|
|
||||||
value -= step
|
value -= step
|
||||||
|
|
||||||
|
call_deferred(\"check_input_held\", false)
|
||||||
get_viewport().set_input_as_handled()
|
get_viewport().set_input_as_handled()
|
||||||
else:
|
|
||||||
if Input.is_action_just_pressed(\"ui_up\"):
|
|
||||||
print(focus_neighbor_top)
|
|
||||||
|
|
||||||
func _on_focus_enter():
|
func _on_focus_enter():
|
||||||
get_line_edit().add_theme_stylebox_override(\"normal\", focus_stylebox)
|
get_line_edit().add_theme_stylebox_override(\"normal\", focus_stylebox)
|
||||||
|
|
||||||
func _on_focus_exit():
|
func _on_focus_exit():
|
||||||
get_line_edit().remove_theme_stylebox_override(\"normal\")
|
get_line_edit().remove_theme_stylebox_override(\"normal\")
|
||||||
|
|
||||||
|
func check_input_held(upward: bool):
|
||||||
|
await(get_tree().create_timer(repeat_delay).timeout)
|
||||||
|
while ((Input.is_action_pressed(\"ui_up\", true) or Input.is_action_pressed(\"ui_right\", true) and upward) or (Input.is_action_pressed(\"ui_down\", true) or Input.is_action_pressed(\"ui_left\", true) and not upward)):
|
||||||
|
value += step * repeat_multiplier * (1 if upward else -1)
|
||||||
|
await(get_tree().create_timer(repeat_delay).timeout)
|
||||||
|
|
||||||
"
|
"
|
||||||
|
|
||||||
[node name="Video Settings" type="VBoxContainer"]
|
[node name="Video Settings" type="VBoxContainer"]
|
||||||
|
|
@ -134,6 +134,7 @@ layout_mode = 2
|
||||||
selected = 1
|
selected = 1
|
||||||
item_count = 3
|
item_count = 3
|
||||||
popup/item_0/text = "Windowed"
|
popup/item_0/text = "Windowed"
|
||||||
|
popup/item_0/id = 0
|
||||||
popup/item_1/text = "Fullscreen"
|
popup/item_1/text = "Fullscreen"
|
||||||
popup/item_1/id = 1
|
popup/item_1/id = 1
|
||||||
popup/item_2/text = "exclusive Fullscreen"
|
popup/item_2/text = "exclusive Fullscreen"
|
||||||
|
|
@ -152,6 +153,7 @@ text = "reset"
|
||||||
|
|
||||||
[node name="RenderScale" type="SpinBox" parent="GridContainer/HBoxContainer"]
|
[node name="RenderScale" type="SpinBox" parent="GridContainer/HBoxContainer"]
|
||||||
unique_name_in_owner = true
|
unique_name_in_owner = true
|
||||||
|
custom_minimum_size = Vector2(120, 0)
|
||||||
layout_mode = 2
|
layout_mode = 2
|
||||||
focus_mode = 2
|
focus_mode = 2
|
||||||
min_value = 0.25
|
min_value = 0.25
|
||||||
|
|
@ -174,7 +176,8 @@ layout_mode = 2
|
||||||
selected = 0
|
selected = 0
|
||||||
item_count = 3
|
item_count = 3
|
||||||
popup/item_0/text = "disabled"
|
popup/item_0/text = "disabled"
|
||||||
popup/item_1/text = " "
|
popup/item_0/id = 0
|
||||||
|
popup/item_1/text = " FSR 1.0"
|
||||||
popup/item_1/id = 1
|
popup/item_1/id = 1
|
||||||
popup/item_2/text = "FSR 2.2"
|
popup/item_2/text = "FSR 2.2"
|
||||||
popup/item_2/id = 2
|
popup/item_2/id = 2
|
||||||
|
|
@ -214,6 +217,7 @@ layout_mode = 2
|
||||||
selected = 1
|
selected = 1
|
||||||
item_count = 4
|
item_count = 4
|
||||||
popup/item_0/text = "minimum"
|
popup/item_0/text = "minimum"
|
||||||
|
popup/item_0/id = 0
|
||||||
popup/item_1/text = "low (SDF Global Illumination)"
|
popup/item_1/text = "low (SDF Global Illumination)"
|
||||||
popup/item_1/id = 1
|
popup/item_1/id = 1
|
||||||
popup/item_2/text = "medium (SDF and Screen Space Global Illumination)"
|
popup/item_2/text = "medium (SDF and Screen Space Global Illumination)"
|
||||||
|
|
@ -231,6 +235,7 @@ layout_mode = 2
|
||||||
selected = 1
|
selected = 1
|
||||||
item_count = 3
|
item_count = 3
|
||||||
popup/item_0/text = "performance"
|
popup/item_0/text = "performance"
|
||||||
|
popup/item_0/id = 0
|
||||||
popup/item_1/text = "balanced"
|
popup/item_1/text = "balanced"
|
||||||
popup/item_1/id = 1
|
popup/item_1/id = 1
|
||||||
popup/item_2/text = "quality"
|
popup/item_2/text = "quality"
|
||||||
|
|
@ -246,6 +251,7 @@ layout_mode = 2
|
||||||
selected = 1
|
selected = 1
|
||||||
item_count = 6
|
item_count = 6
|
||||||
popup/item_0/text = "disabled"
|
popup/item_0/text = "disabled"
|
||||||
|
popup/item_0/id = 0
|
||||||
popup/item_1/text = "1x (very fast)"
|
popup/item_1/text = "1x (very fast)"
|
||||||
popup/item_1/id = 1
|
popup/item_1/id = 1
|
||||||
popup/item_2/text = "2x (fast)"
|
popup/item_2/text = "2x (fast)"
|
||||||
|
|
@ -267,6 +273,7 @@ layout_mode = 2
|
||||||
selected = 1
|
selected = 1
|
||||||
item_count = 4
|
item_count = 4
|
||||||
popup/item_0/text = "disabled"
|
popup/item_0/text = "disabled"
|
||||||
|
popup/item_0/id = 0
|
||||||
popup/item_1/text = "2x MSAA"
|
popup/item_1/text = "2x MSAA"
|
||||||
popup/item_1/id = 1
|
popup/item_1/id = 1
|
||||||
popup/item_2/text = "4x MSAA"
|
popup/item_2/text = "4x MSAA"
|
||||||
|
|
@ -284,6 +291,7 @@ layout_mode = 2
|
||||||
selected = 1
|
selected = 1
|
||||||
item_count = 4
|
item_count = 4
|
||||||
popup/item_0/text = "disabled"
|
popup/item_0/text = "disabled"
|
||||||
|
popup/item_0/id = 0
|
||||||
popup/item_1/text = "enabled"
|
popup/item_1/text = "enabled"
|
||||||
popup/item_1/id = 1
|
popup/item_1/id = 1
|
||||||
popup/item_2/text = "adaptive"
|
popup/item_2/text = "adaptive"
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue