                      (rx/mapcat conditional-align-point)
                      (rx/map #(gpt/subtract % canvas-coords)))
 
-          stoper (rx/take 1 (rx/filter stoper-event? wb/events-s))
+          stoper (->> (rx/merge
+                       (rx/take 1 drawing-stoper)
+                       (rx/filter stoper-event? wb/events-s))
+                      (rx/take 1))
           firstpos (rx/take 1 mouse)
           stream (->> (rx/take-until stoper mouse)
                       (rx/skip-while #(nil? @drawing-shape))


;; --- State

(defonce drawing-shape (atom nil))
(defonce drawing-position (atom nil))


                (let [point (gpt/point point)]
                  (update shape :points conj point)))

              (update-point [{:keys [type points] :as shape} point index]
                (let [point (gpt/point point)
                      points (:points shape)]
                  (assoc-in shape [:points index] point)))

              (on-first-point [point]
                (let [shape (append-point shape point)]
