window_controls.cljs 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. (ns frontend.components.window-controls
  2. (:require [electron.ipc :as ipc]
  3. [frontend.components.svg :as svg]
  4. [frontend.context.i18n :refer [t]]
  5. [frontend.state :as state]
  6. [frontend.ui :as ui]
  7. [rum.core :as rum]))
  8. (defn minimize
  9. []
  10. (ipc/ipc "window-minimize"))
  11. (defn toggle-maximized
  12. []
  13. (ipc/ipc "window-toggle-maximized"))
  14. (defn close
  15. []
  16. (ipc/ipc "window-close"))
  17. (defn toggle-fullscreen
  18. []
  19. (ipc/ipc "window-toggle-fullscreen"))
  20. (rum/defc container < rum/reactive
  21. []
  22. (let [maximized? (state/sub :electron/window-maximized?)
  23. fullscreen? (state/sub :electron/window-fullscreen?)]
  24. [:div.window-controls.flex
  25. (if fullscreen?
  26. [:button.button.icon.fullscreen-toggle
  27. {:title (t :window/exit-fullscreen)
  28. :on-click toggle-fullscreen}
  29. (ui/icon "arrows-minimize")]
  30. [:<>
  31. [:button.button.icon.minimize
  32. {:title (t :window/minimize)
  33. :on-click minimize}
  34. (svg/window-minimize)]
  35. [:button.button.icon.maximize-toggle
  36. {:title (if maximized? (t :window/restore) (t :window/maximize))
  37. :class (if maximized? "restore" "maximize")
  38. :on-click toggle-maximized}
  39. (if maximized?
  40. (svg/window-restore)
  41. (svg/window-maximize))]
  42. [:button.button.icon.close
  43. {:title (t :window/close)
  44. :on-click close}
  45. (svg/window-close)]])]))