Every popup is now called *Popup instead of *Window in its file, root node, node name, class and variable, and PopupWindow becomes BasePopup. Player is PlayerRow, SongListObject is SongRow and Character is CharacterCard. Script files are snake_case and scene files PascalCase, each matching its class or root node, and LightGrayTheme.tres is light_gray_theme.tres.
32 lines
1.1 KiB
GDScript
32 lines
1.1 KiB
GDScript
class_name PopupBackdrop
|
|
extends ColorRect
|
|
## Dims everything behind an open popup and keeps clicks from reaching the buttons
|
|
## under it.
|
|
##
|
|
## The backdrop sits above the rest of its parent and below the popups it belongs to.
|
|
## Popups close themselves when clicked outside, and the backdrop keeps that click from
|
|
## reaching the buttons behind them.
|
|
|
|
var _popups: Array[BasePopup] = []
|
|
|
|
|
|
## Adds a backdrop to [param parent] and moves [param popups] above it. The backdrop
|
|
## shows while any of them is open.
|
|
static func add_to(parent: Control, popups: Array[BasePopup]) -> PopupBackdrop:
|
|
var backdrop: PopupBackdrop = PopupBackdrop.new()
|
|
backdrop.name = "PopupBackdrop"
|
|
backdrop.color = Color(0, 0, 0, 0.55)
|
|
backdrop.mouse_filter = Control.MOUSE_FILTER_STOP
|
|
backdrop._popups = popups
|
|
parent.add_child(backdrop)
|
|
backdrop.set_anchors_and_offsets_preset(Control.PRESET_FULL_RECT)
|
|
for popup: BasePopup in popups:
|
|
parent.move_child(popup, -1)
|
|
popup.visibility_changed.connect(backdrop._update)
|
|
backdrop._update()
|
|
return backdrop
|
|
|
|
|
|
func _update() -> void:
|
|
visible = _popups.any(func(popup: BasePopup) -> bool: return popup.visible)
|