54 lines
1.5 KiB
Swift

//
// Fixed+.swift
// Adwaita
//
// Created by david-swift on 21.07.24.
//
import CAdw
extension Fixed {
/// Place an element in the coordinate system.
/// - Parameters:
/// - xCoordinate: The x coordinate.
/// - yCoordinate: The y coordinate.
/// - id: A unique identifier.
/// - view: The element.
/// - Returns: The coordinate system with the element.
public func element(
x xCoordinate: Double,
y yCoordinate: Double,
id: String,
@ViewBuilder view: @escaping () -> Body
) -> Self {
var newSelf = self
newSelf.appearFunctions.append { storage, modifiers in
let view = view().storage(modifiers: modifiers)
gtk_fixed_put(
storage.pointer?.cast(),
view.pointer?.cast(),
xCoordinate,
yCoordinate
)
storage.content[id] = [view]
}
newSelf.updateFunctions.append { storage, modifiers, updateProperties in
guard let content = storage.content[id]?.first else {
return
}
view().updateStorage(content, modifiers: modifiers, updateProperties: updateProperties)
if updateProperties {
gtk_fixed_move(
storage.pointer?.cast(),
content.pointer?.cast(),
xCoordinate,
yCoordinate
)
}
}
return newSelf
}
}