   (.map (gesture-observable manager svg "pinchmove")
         #(.-scale %)))
 
-(defn zoom-out-on-pinch! [manager current-state]
+(defn zoom-out-on-pinch! [manager current-state animation-observable]
   (-> (pinch-observable manager (:svg @current-state))
+      (suppress-while-animating animation-observable)
       (.filter #(< % 0.5))
       (.subscribe #(js/alert "TODO: zoom out"))))
 
 ;; Temporary animation test function
 
-(defn zoom-in-out-on-interval! [current-state]
+(defn zoom-in-out-on-interval! [current-state animation-signaller]
   ((fn f [projection]
      (.setTimeout js/window
                   (fn []
-                    (set-projection! current-state projection)
+                    (set-projection! current-state projection animation-signaller)
                     (f (if (= projection :fisheye) :zoom-out :fisheye)))
                   2000)) :zoom-out))
 

(defn move-camera! [current-state d]
  (update-state! current-state :camera-pos add-vec d))

(defn set-projection! [current-state projection]
  (swap! current-state assoc :projection projection)
  (sync-graph! @current-state :animate true))

;; Layout


                                       identity
                                       (constantly update-interval-ms))))))))

(defn move-camera-on-swipe! [manager current-state animation-observable]
  (-> (swipe-displacements-observable manager (:svg @current-state))
      (suppress-while-animating animation-observable)
      (.subscribe (partial move-camera! current-state))))

;; Gestures - pinch

