import { register } from 'astal'; import { Gtk } from 'astal/gtk4'; import astalify, { childType, type AstalifyProps, type ConstructProps } from '../astalify'; export type OverlayProps = ConstructProps< OverlayClass, Gtk.Overlay.ConstructorProps & AstalifyProps >; @register({ GTypeName: 'Overlay' }) export class OverlayClass extends astalify(Gtk.Overlay) { constructor({ cssName = 'overlay', ...props }: OverlayProps = {}) { super({ cssName, ...props }); } getChildren(self: OverlayClass) { const children: Gtk.Widget[] = []; let ch = self.get_first_child(); while (ch !== null) { children.push(ch); ch = ch.get_next_sibling(); } return children.filter((child) => child !== self.child); } setChildren(self: OverlayClass, children: Gtk.Widget[]) { for (const child of children) { const types = childType in child ? (child[childType] as string).split(/\s+/) : []; if (types.includes('overlay')) { self.add_overlay(child); } else { self.set_child(child); } self.set_measure_overlay(child, types.includes('measure')); self.set_clip_overlay(child, types.includes('clip')); } } } export const Overlay = (props?: OverlayProps) => new OverlayClass(props);