nixos-configs/modules/ags/config/ts/overview/current-workspace.ts

52 lines
1.5 KiB
TypeScript
Raw Normal View History

const Hyprland = await Service.import('hyprland');
const { Box } = Widget;
import * as VARS from './variables.ts';
const PADDING = 34;
const MARGIN = 9;
const DEFAULT_STYLE = `
min-width: ${VARS.SCREEN.X * VARS.SCALE}px;
min-height: ${(VARS.SCREEN.Y * VARS.SCALE) - (VARS.MARGIN / 2)}px;
border-radius: 10px;
`;
2024-01-13 11:15:08 -05:00
// Types
import AgsBox from 'types/widgets/box.ts';
import AgsRevealer from 'types/widgets/revealer.ts';
import AgsCenterBox from 'types/widgets/centerbox.ts';
import AgsEventBox from 'types/widgets/eventbox.ts';
2023-12-23 01:14:21 -05:00
export const Highlighter = () => Box({
2023-11-07 10:56:12 -05:00
vpack: 'start',
hpack: 'start',
2023-12-23 01:14:21 -05:00
class_name: 'workspace active',
2023-11-07 10:56:12 -05:00
css: DEFAULT_STYLE,
});
2024-01-13 11:15:08 -05:00
export const updateCurrentWorkspace = (main: AgsBox, highlighter: AgsBox) => {
const currentId = Hyprland.active.workspace.id;
const row = Math.floor((currentId - 1) / VARS.WORKSPACE_PER_ROW);
2024-01-13 11:15:08 -05:00
const rowObject = (main.children[0] as AgsBox).children[row] as AgsRevealer;
const workspaces = ((((rowObject.child as AgsCenterBox)
.center_widget as AgsEventBox)
.child as AgsBox)
.get_children() as Array<AgsRevealer>)
.filter((w) => w.reveal_child);
2023-12-23 01:14:21 -05:00
const currentIndex = workspaces.findIndex(
(w) => w.attribute.id === currentId,
);
const left = currentIndex * ((VARS.SCREEN.X * VARS.SCALE) + 2 + PADDING);
const height = row * ((VARS.SCREEN.Y * VARS.SCALE) + (PADDING / 2));
highlighter.setCss(`
${DEFAULT_STYLE}
margin-left: ${MARGIN + left}px;
margin-top: ${MARGIN + height}px;
`);
};