Files
MusicPlayer/popup_backdrop.gd
T

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[PopupWindow] = []
## 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[PopupWindow]) -> 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: PopupWindow 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: PopupWindow) -> bool: return popup.visible)