   (setup-click-handler ["increase-thickness", "decrease-thickness"])
   (setup-input-handler ["stroke-thickness"])
   (add-canvas-handlers
-    ["mousemove" mousemove-handler]
-    ["mousedown" mousedown-handler]
-    ["mouseup"   mouseup-handler])
+    ["touchmove"  touchmove-handler]
+    ["touchstart" touchstart-handler]
+    ["touchend"   touchend-handler]
+    ["mousemove"  mousemove-handler]
+    ["mousedown"  mousedown-handler]
+    ["mouseup"    mouseup-handler])
   (canvas/fill-style canvas-context "#000"))
 
 (init)

(defn mouseup-handler [event]
  (when (= 0 (.-button event))
    (finish-stroke)))

(defn redraw-all-strokes [ctx strokes]
  (drawing/clear-screen ctx)

(def drawn-strokes (atom []))
(def undone-strokes (atom '()))
(def stroke-thickness (atom 1))
(def current-touch-id (atom nil))

(defn event->coord [event]
  (let [canvasrect (.getBoundingClientRect canvas-element)]
