File tree Expand file tree Collapse file tree 6 files changed +42
-23
lines changed
Expand file tree Collapse file tree 6 files changed +42
-23
lines changed Original file line number Diff line number Diff line change 6565 " windowToggleFullscreen"
6666 (.setFullScreen ^js @main-window (not (.isFullScreen ^js @main-window)))
6767
68- " setThemeMode"
69- (set! (.. nativeTheme -themeSource) (.-data args))
70-
7168 " openRemoteUrl"
7269 (open-external! (.-data args))
7370
Original file line number Diff line number Diff line change 9494 " fileLoaded" (rf/dispatch [::document.e/load (edn/read-string (.-data data))])
9595 " fileSaved" (rf/dispatch [::document.e/saved (edn/read-string (.-data data))])))))
9696
97+ (defn handle-system-theme!
98+ []
99+ (let [query (.matchMedia js/window " (prefers-color-scheme: dark)" )
100+ get-theme (fn [query] (if (.-matches query) :dark :light ))]
101+ (rf/dispatch [:set-native-theme (get-theme query)])
102+ (.addListener query #(rf/dispatch [:set-native-theme (get-theme %)]))))
103+
97104
98105(defn ^:export init []
99106 #_ (if platform/electron?
111118
112119 (rf/dispatch-sync [:initialize-db ])
113120 (rf/dispatch-sync [:load-local-db ])
114- (rf/dispatch-sync [:theme/ init-mode ])
121+ (rf/dispatch-sync [:init-theme -mode ])
115122 (rf/dispatch-sync [::document.e/new ])
116123 (rf/dispatch-sync [:set-tool :select ])
117124 (rf/dispatch-sync [:set-mdn (js->clj mdn :keywordize-keys true )])
122129 (.addEventListener js/document " keydown" keyb/event-handler)
123130 (.addEventListener js/document " keyup" keyb/event-handler)
124131
132+ (handle-system-theme! )
133+
125134 (.setup paper) ; REVIEW
126135
127136 (if platform/electron?
Original file line number Diff line number Diff line change 2222 [:pen-mode? boolean?]
2323 [:panel [:map-of :key [:map [:visible? boolean?]]]]
2424 [:window renderer.window.db/window]
25- [:theme [:mode [:enum :dark :light :system ]]]
25+ [:theme [:mode [:enum :dark :light :system ]
26+ :native [:enum :dark :light ]]]
2627 [:timeline renderer.timeline.db/timeline]])
2728
2829(def default
Original file line number Diff line number Diff line change 103103 (fn [db [_ key]]
104104 (update-in db [key :visible? ] not)))
105105
106+ (rf/reg-fx
107+ :set-document-theme-attr
108+ (fn [[mode]]
109+ (.setAttribute js/window.document.documentElement " data-theme" mode)))
110+
106111(rf/reg-event-fx
107- :theme/ init-mode
112+ :init-theme -mode
108113 (fn [{:keys [db]} _]
109- (let [mode (-> db :theme :mode name)]
110- { :set-attribute [js/window.document.documentElement " data- theme" mode]
111- :send-to-main { :action " setThemeMode " :data mode} })))
114+ (let [mode (-> db :theme :mode )
115+ mode ( if ( = mode :system ) ( -> db : theme :native ) mode) ]
116+ { :set-document-theme-attr [( name mode)] })))
112117
113118(rf/reg-event-fx
114- :theme/set-mode
119+ :set-native-theme
120+ local-storage/persist
121+ (fn [{:keys [db]} [_ mode]]
122+ {:db (assoc-in db [:theme :native ] mode)
123+ :dispatch [:init-theme-mode ]}))
124+
125+ (rf/reg-event-fx
126+ :set-theme-mode
115127 local-storage/persist
116128 (fn [{:keys [db]} [_ mode]]
117129 {:db (assoc-in db [:theme :mode ] mode)
118- :dispatch [:theme/ init-mode ]}))
130+ :dispatch [:init-theme -mode ]}))
119131
120132(rf/reg-event-fx
121- :theme/ cycle-mode
133+ :cycle-theme -mode
122134 (fn [{:keys [db]} [_]]
123135 (let [mode (case (-> db :theme :mode )
124- ; ; TODO: Support system mode.
125136 :dark :light
126- :light :dark )]
127- {:dispatch [:theme/set-mode mode]})))
137+ :light :system
138+ :system :dark )]
139+ {:dispatch [:set-theme-mode mode]})))
128140
129141(rf/reg-event-fx
130142 :pointer-event
272284 (fn [_ [_ id]]
273285 {:focus id}))
274286
275- (rf/reg-fx
276- :set-attribute
277- (fn [[el attr val]]
278- (.setAttribute el attr val)))
Original file line number Diff line number Diff line change 3838(defn app-header
3939 []
4040 (let [fullscreen? @(rf/subscribe [::window.s/fullscreen? ])
41- maximized? @(rf/subscribe [::window.s/maximized? ])]
41+ maximized? @(rf/subscribe [::window.s/maximized? ])
42+ theme-mode (name @(rf/subscribe [:theme-mode ]))]
4243 [:div.flex.items-center.relative
4344 (when-not (or fullscreen? platform/mac?)
4445 [app-icon])
5051 :style {:z-index -1 }}
5152 @(rf/subscribe [::document.s/title-bar ])]
5253 [:div.flex.h-full.flex-1.drag ]
53- [button {:action [:theme/ cycle-mode ]
54- :title " Theme mode"
55- :icon ( name @( rf/subscribe [ : theme-mode]))
54+ [button {:action [:cycle-theme -mode ]
55+ :title ( str " Theme mode - " theme-mode)
56+ :icon theme-mode
5657 :class " bg-primary" }]
5758 (when (and platform/electron? (not fullscreen?) (not platform/mac?))
5859 (into [:div.text-right ]
You can’t perform that action at this time.
0 commit comments