diff --git a/src/main/ipcs/index.ts b/src/main/ipcs/index.ts index aa96e5e..f98e41b 100644 --- a/src/main/ipcs/index.ts +++ b/src/main/ipcs/index.ts @@ -4,3 +4,4 @@ import './ipcProjects'; import './ipcGit'; import './ipcLaunch'; import './ipcGitHub'; +import './ipcSticker'; diff --git a/src/main/ipcs/ipcSticker.ts b/src/main/ipcs/ipcSticker.ts new file mode 100644 index 0000000..6f282c6 --- /dev/null +++ b/src/main/ipcs/ipcSticker.ts @@ -0,0 +1,20 @@ +import { ipcMain, Menu, Tray, nativeImage, BrowserWindow } from 'electron'; +import log from 'electron-log'; + +let tray: Tray | null = null; + +ipcMain.handle('sticker:add', async (_, text: string): Promise => { + if (tray) tray.destroy(); + + const trayIcon = nativeImage.createEmpty(); + tray = new Tray(trayIcon); + tray.setTitle(text, { fontType: 'monospaced' }); + tray.setToolTip('Devkitty. Click to remove sticker.'); + + tray.on('click', () => { + if (tray) { + tray.destroy(); + tray = null; + } + }); +}); diff --git a/src/main/ipcs/preload.ts b/src/main/ipcs/preload.ts index 4ee0dc6..836a3ff 100644 --- a/src/main/ipcs/preload.ts +++ b/src/main/ipcs/preload.ts @@ -42,6 +42,9 @@ const bridge = { ipcRenderer.on('settings:updated', callback), set: (key: K, value: Partial, safe?: boolean) => ipcRenderer.invoke('settings:set', key, value, safe) + }, + sticker: { + add: (text: string) => ipcRenderer.invoke('sticker:add', text) } }; diff --git a/src/rendered/components/AppNavbar/AppNavbar.tsx b/src/rendered/components/AppNavbar/AppNavbar.tsx index bead584..e9e197e 100644 --- a/src/rendered/components/AppNavbar/AppNavbar.tsx +++ b/src/rendered/components/AppNavbar/AppNavbar.tsx @@ -7,11 +7,20 @@ import { useDarkMode } from 'rendered/hooks/useDarkMode'; import { useProjects } from 'rendered/hooks/useProjects'; import { LeftGroup, Logo, RightGroup, StyledNavbar, Shadow, ShadowContainer, Title } from './AppNavbar.styles'; +import { useModal } from 'rendered/hooks/useModal'; export const AppNavbar = () => { const { themeSource, toggleDarkMode } = useDarkMode(); const { showLogo } = useAppSettings(); const { addProject } = useProjects(); + const { openModal } = useModal(); + + const addSticker = () => { + openModal({ + name: 'sticker:add', + props: {} + }); + }; const refresh = () => { window.location.reload(); @@ -59,6 +68,12 @@ export const AppNavbar = () => { /> )} +