48 lines
1.3 KiB
TypeScript
48 lines
1.3 KiB
TypeScript
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
||
|
|
||
|
import { register } from 'astal';
|
||
|
import { Gtk, type ConstructProps } from 'astal/gtk4';
|
||
|
|
||
|
import astalify, { filter, type } from './astalify';
|
||
|
|
||
|
|
||
|
export type OverlayProps = ConstructProps<
|
||
|
Overlay,
|
||
|
Gtk.Overlay.ConstructorProps & { css: string }
|
||
|
>;
|
||
|
|
||
|
@register({ GTypeName: 'Overlay' })
|
||
|
export class Overlay extends astalify(Gtk.Overlay) {
|
||
|
constructor(props?: OverlayProps) { super(props as any); }
|
||
|
|
||
|
getChildren(self: Overlay) {
|
||
|
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: Overlay, children: any[]) {
|
||
|
for (const child of filter(children)) {
|
||
|
const types = type in child ?
|
||
|
(child[type] 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'));
|
||
|
}
|
||
|
}
|
||
|
}
|