                              :font-watcher
                              (fn [_ _ _ new-font]
                                (log/info "Using font" new-font)
-                               (let [font-metrics  ^FontMetrics (.getFontMetrics (Canvas.) new-font)
-                                     char-width                 (.charWidth font-metrics \M)
-                                     char-height                (.getHeight font-metrics)
-                                     screen-width               (* columns char-width)
-                                     screen-height              (* rows char-height)
-                                     ;; create texture atlas as Buffered texture
+                               (let [;; create texture atlas as Buffered texture
                                      {:keys [font-texture-width
                                              font-texture-height
-                                             font-texture-image]} (make-glyph-image char-width char-height new-font)]
-                                 (log/info "Created font texture. screen-width" screen-width "screen-height" screen-height)
+                                             font-texture-image
+                                             character-width
+                                             character-height
+                                             character->col-row]
+                                      :as font-parameters} (glyph-graphics new-font)
+                                     screen-width (* character-width columns)
+                                     screen-height (* character-height rows)]
+                                 (log/info "Created font texture " (dissoc font-parameters :character->col-row) " screen-width" screen-width "screen-height" screen-height)
                                  (swap! font-textures assoc
                                                      (font-key new-font)
                                                      {:screen-width screen-width
                                                       :screen-height screen-height
-                                                      :character-width char-width
-                                                      :character-height char-height
+                                                      :character-width character-width
+                                                      :character-height character-height
+                                                      :character->col-row character->col-row
                                                       :font-texture-width font-texture-width
                                                       :font-texture-height font-texture-height
                                                       :font-texture-image font-texture-image}))))
           _                  (reset! normal-font (if is-windows
-                                                   (make-font windows-font Font/PLAIN font-size)
-                                                   (make-font else-font Font/PLAIN font-size)))
+                                                   windows-font
+                                                   else-font))
           ;; false if Display is destoyed
           destroyed          (atom false)
           gl-lock            (atom true)

        (Font. name-or-path style size)))))

(defn next-pow-2 [v]
  (int (Math/pow 2 (inc (Math/floor (/ (Math/log v) (Math/log 2)))))))


(def cjk-blocks

            [taoensso.timbre :as log]
            [clojure.core.async :as async :refer [go go-loop]]
            [clojure-watch.core :as cwc]
            [clojure.core.async :as async]
            [clojure.java.io :as jio])
  (:import
    (java.lang.reflect Field)
    (java.awt Canvas
