const { Box, CenterBox, Label, ToggleButton } = Widget; const { Gdk } = imports.gi; const display = Gdk.Display.get_default(); import Separator from '../misc/separator.ts'; import RoundedCorner from '../corners/screen-corners.ts'; import Key from './keys.ts'; import { defaultOskLayout, oskLayouts } from './keyboard-layouts.ts'; const keyboardLayout = defaultOskLayout; const keyboardJson = oskLayouts[keyboardLayout]; const L_KEY_PER_ROW = [8, 7, 6, 6, 6, 4]; // eslint-disable-line const COLOR = 'rgba(0, 0, 0, 0.3)'; const SPACING = 4; // Types import { BoxGeneric, OskWindow } from 'global-types'; export default (window: OskWindow) => Box({ vertical: true, children: [ CenterBox({ hpack: 'center', start_widget: RoundedCorner('bottomright', ` background-color: ${COLOR}; `), center_widget: CenterBox({ class_name: 'thingy', css: `background: ${COLOR};`, center_widget: Box({ hpack: 'center', class_name: 'settings', children: [ ToggleButton({ class_name: 'button', active: true, vpack: 'center', setup: (self) => { self .on('toggled', () => { self.toggleClassName( 'toggled', self.get_active(), ); window.exclusivity = self.get_active() ? 'exclusive' : 'normal'; }) // OnHover .on('enter-notify-event', () => { if (!display) { return; } self.window.set_cursor( Gdk.Cursor.new_from_name( display, 'pointer', ), ); self.toggleClassName('hover', true); }) // OnHoverLost .on('leave-notify-event', () => { self.window.set_cursor(null); self.toggleClassName('hover', false); }); }, child: Label('Exclusive'), }), ], }), }), end_widget: RoundedCorner('bottomleft', ` background-color: ${COLOR}; `), }), CenterBox({ css: `background: ${COLOR};`, class_name: 'osk', hexpand: true, start_widget: Box({ class_name: 'left-side side', hpack: 'start', vertical: true, children: keyboardJson.keys.map((row, rowIndex) => { const keys = [] as BoxGeneric[]; row.forEach((key, keyIndex) => { if (keyIndex < L_KEY_PER_ROW[rowIndex]) { keys.push(Key(key)); } }); return Box({ vertical: true, children: [ Box({ class_name: 'row', children: [ Separator(SPACING), ...keys, ], }), Separator(SPACING, { vertical: true }), ], }); }), }), center_widget: Box({ hpack: 'center', vpack: 'center', children: [ ], }), end_widget: Box({ class_name: 'right-side side', hpack: 'end', vertical: true, children: keyboardJson.keys.map((row, rowIndex) => { const keys = [] as BoxGeneric[]; row.forEach((key, keyIndex) => { if (keyIndex >= L_KEY_PER_ROW[rowIndex]) { keys.push(Key(key)); } }); return Box({ vertical: true, children: [ Box({ hpack: 'end', class_name: 'row', children: keys, }), Separator(SPACING, { vertical: true }), ], }); }), }), }), ], });