54 lines
1.4 KiB
Swift
54 lines
1.4 KiB
Swift
//
|
|
// Popover+.swift
|
|
// Adwaita
|
|
//
|
|
// Created by david-swift on 10.02.24.
|
|
//
|
|
|
|
import CAdw
|
|
|
|
extension Popover {
|
|
|
|
/// Initialize either a horizontal or vertical clamp.
|
|
/// - Parameter vertical: Whether it is a vertical clamp.
|
|
init(visible: Binding<Bool>) {
|
|
self.init()
|
|
appearFunctions.append { storage in
|
|
storage.fields["visible"] = visible
|
|
storage.connectSignal(name: "closed", id: "visible") {
|
|
if let binding = storage.fields["visible"] as? Binding<Bool> {
|
|
if binding.wrappedValue {
|
|
binding.wrappedValue = false
|
|
}
|
|
}
|
|
}
|
|
}
|
|
updateFunctions.append { storage in
|
|
if let binding = storage.fields["visible"] as? Binding<Bool> {
|
|
if binding.wrappedValue {
|
|
gtk_popover_popup(storage.pointer?.cast())
|
|
} else {
|
|
gtk_popover_popdown(storage.pointer?.cast())
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
extension View {
|
|
|
|
/// Add a popover on top of the view.
|
|
/// - Parameters:
|
|
/// - visible: Whether the popover is displayed.
|
|
/// - content: The popover's content.
|
|
/// - Returns: The view.
|
|
public func popover(visible: Binding<Bool>, @ViewBuilder content: @escaping () -> Body) -> View {
|
|
overlay {
|
|
Popover(visible: visible)
|
|
.child(content)
|
|
}
|
|
}
|
|
|
|
}
|