                 (write-display-cell controller 0 x (str "H: " hue-str " S: " sat-str))
                 (write-display-text controller 1 (* x 17) hue-gauge)
                 (write-display-text controller 1 (+ 9 (* x 17)) sat-gauge))
+              ;; Darken the cue var scroll button if it was going to be lit
+              (aset (:next-top-pads controller) (inc (* 2 x)) (top-pad-state :off))
               true)))
         (handle-control-change [this message]
-          ;; Adjust hue or saturation depending on controller
-          (let [current-color (or (cues/get-cue-variable cue cue-var :show (:show controller) :when-id effect-id)
-                                  (aget color-picker-grid 6))
-                delta (* (sign-velocity (:velocity message)) 0.5)]
-            (cues/set-cue-variable! cue cue-var
-                                    (if (= (:note message) hue-control)
-                                      (colors/adjust-hue current-color delta)
-                                      (colors/saturate current-color delta))
-                                    :show (:show controller) :when-id effect-id))
+          ;; Adjust hue or saturation depending on controller; ignore if it was the cue var scroll button
+          (when (#{hue-control sat-control} (:note message))
+            (let [current-color (or (cues/get-cue-variable cue v :show (:show controller) :when-id effect-id)
+                                    (aget color-picker-grid 6))
+                  delta (* (sign-velocity (:velocity message)) 0.5)]
+              (cues/set-cue-variable! cue v
+                                      (if (= (:note message) hue-control)
+                                        (colors/adjust-hue current-color delta)
+                                        (colors/saturate current-color delta))
+                                      :show (:show controller) :when-id effect-id)))
           true)
         (handle-note-on [this message]
           (let [note (:note message)]

(defn- build-color-adjustment-overlay
  "Create an overlay for adjusting a color cue parameter. `note`
  identifies the encoder that was touched to bring up this overlay,
  `cue` is the cue whose variable is being adjusted, `effect` is the
  effect which that cue is running, and `info` is the metadata about
  that effect."
  [controller note cue effect info]
  (let [anchors (atom #{note})  ; Track which encoders are keeping the overlay active
        x (quot note 2)
        var-index (min (rem note 2) (dec (count (:variables cue))))
        cue-var (get (:variables cue) var-index)
        effect-id (:id info)]
    ;; Take full cell, using both encoders to adjust hue and saturation.
    (let [[hue-note sat-note] (if (odd? note) [(dec note) note] [note (inc note)])
          [hue-control sat-control] (map control-for-top-encoder-note [hue-note sat-note])]
      (reify controllers/IOverlay
        (captured-controls [this] #{hue-control sat-control})
        (captured-notes [this] (clojure.set/union #{hue-note sat-note} (set (drop 36 (range 100)))))
        (adjust-interface [this _]
          (when (same-effect-active controller cue (:id info))
            ;; Draw the color picker grid
            (System/arraycopy color-picker-grid 0 (:next-grid-pads controller) 0 64)
            (let [current-color (or (cues/get-cue-variable cue cue-var :show (:show controller) :when-id effect-id)
                                    (aget color-picker-grid 6))]
              ;; Show the preview color at the bottom right
              (aset (:next-grid-pads controller) 7 current-color)

  "Display information about the four most recently activated
  effects (or three, if the metronome is taking up a slot)."
  [controller]

  ;; First clean up any cue variable scroll offsets for effects that have ended
  (swap! (:cue-var-offsets controller) select-keys (map :id (:meta @(:active-effects (:show controller)))))

  (let [room (room-for-effects controller)
        first-cell (- 4 room)
        fx-info @(:active-effects (:show controller))
