0
Fork 0
mirror of https://github.com/penpot/penpot.git synced 2025-04-06 20:11:29 -05:00

🐛 Prevent font flickering on font change.

This commit is contained in:
Andrey Antukh 2020-04-23 15:32:50 +02:00
parent 9441b87d36
commit 38bbe89f60
2 changed files with 23 additions and 12 deletions

View file

@ -152,16 +152,18 @@
(defmulti ^:private load-font :backend)
(defmethod load-font :builtin
[{:keys [id] :as font}]
(js/console.log "[debug:fonts]: loading builtin font" id))
[{:keys [id ::on-loaded] :as font}]
(js/console.log "[debug:fonts]: loading builtin font" id)
(on-loaded id))
(defmethod load-font :google
[{:keys [id family variants] :as font}]
[{:keys [id family variants ::on-loaded] :as font}]
(js/console.log "[debug:fonts]: loading google font" id)
(let [base (str "https://fonts.googleapis.com/css?family=" family)
variants (str/join "," (map :name variants))
uri (str base ":" variants)
uri (str base ":" variants "&display=block")
node (create-link-node uri)]
(.addEventListener node "load" (fn [event] (on-loaded id)))
(.append (.-head js/document) node)
nil))
@ -170,9 +172,16 @@
(js/console.warn "no implementation found for" backend))
(defn ensure-loaded!
[id]
(when-not (contains? @loaded id)
(when-let [font (get @fontsdb id)]
(load-font font)
(swap! loaded conj id))))
([id]
(when-not (contains? @loaded id)
(when-let [font (get @fontsdb id)]
(load-font font)
(swap! loaded conj id))))
([id on-loaded]
(if (contains? @loaded id)
(on-loaded id)
(when-let [font (get @fontsdb id)]
(load-font (assoc font ::on-loaded on-loaded))
(swap! loaded conj id)))))

View file

@ -57,9 +57,11 @@
(let [id (-> (dom/get-target event)
(dom/get-value))
font (get fonts id)]
(dwt/set-font! editor id (:family font))
(when (not= id font-id)
(dwt/set-font-variant! editor nil nil nil))))
(fonts/ensure-loaded! id
#(do
(dwt/set-font! editor id (:family font))
(when (not= id font-id)
(dwt/set-font-variant! editor nil nil nil))))))
on-font-size-change
(fn [event]