summaryrefslogtreecommitdiff
path: root/src/modules/screencorners.tsx
blob: 4368b874ca5c9a26628047ca3c1b82bc98bd9d4c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
import type { Monitor } from "@/services/monitors";
import ScreenCorner from "@/widgets/screencorner";
import { bind } from "astal/binding";
import { Astal } from "astal/gtk3";
import { bar } from "config";
import Cairo from "gi://cairo";

export default ({ monitor }: { monitor: Monitor }) => (
    <window
        namespace="caelestia-screencorners"
        monitor={monitor.id}
        anchor={bind(bar.vertical).as(
            v =>
                Astal.WindowAnchor.BOTTOM |
                Astal.WindowAnchor.RIGHT |
                (v ? Astal.WindowAnchor.TOP : Astal.WindowAnchor.LEFT)
        )}
        setup={self =>
            self.connect("size-allocate", () => self.get_window()?.input_shape_combine_region(new Cairo.Region(), 0, 0))
        }
    >
        <box vertical={bind(bar.vertical)}>
            <ScreenCorner place={bind(bar.vertical).as(v => (v ? "topright" : "bottomleft"))} />
            <box expand />
            <ScreenCorner place="bottomright" />
        </box>
    </window>
);

export const BarScreenCorners = ({ monitor }: { monitor: Monitor }) => (
    <window
        namespace="caelestia-screencorners"
        monitor={monitor.id}
        anchor={bind(bar.vertical).as(
            v =>
                Astal.WindowAnchor.TOP |
                Astal.WindowAnchor.LEFT |
                (v ? Astal.WindowAnchor.BOTTOM : Astal.WindowAnchor.RIGHT)
        )}
        visible={bind(bar.style).as(s => s === "embedded")}
        setup={self =>
            self.connect("size-allocate", () => self.get_window()?.input_shape_combine_region(new Cairo.Region(), 0, 0))
        }
    >
        <box vertical={bind(bar.vertical)}>
            <ScreenCorner place="topleft" />
            <box expand />
            <ScreenCorner place={bind(bar.vertical).as(v => (v ? "bottomleft" : "topright"))} />
        </box>
    </window>
);