   "Sets the color used to draw lines and borders around shapes. This
   color is either specified in terms of the RGB or HSB color depending
   on the current color-mode (the default color space is RGB, with
-  each value in the range from 0 to 255)."
+  each value in the range from 0 to 255).
+  If nil is passed it removes any fill color; equivalent to (no-stroke)."
   ([gray]
     ; provided color might be passed from (current-fill) in which case it's a vector.
     ; In that case just call fill again applying vector to the (fill).
-   (if (vector? gray)
-     (apply stroke gray)
-     (do
-       (.stroke (current-graphics) (float gray))
-       (save-current-stroke [gray]))))
+   (cond (vector? gray) (apply stroke gray)
+         (nil? gray) (no-stroke)
+         true (do
+                (.stroke (current-graphics) (float gray))
+                (save-current-stroke [gray]))))
   ([gray alpha]
    (.stroke (current-graphics) (float gray) (float alpha))
    (save-current-stroke [gray alpha]))

  `(let [stroke# ~stroke
         previous-stroke# (quil.core/current-stroke)]

     (cond (not stroke#) (quil.core/no-stroke)
           (sequential? stroke#) (apply quil.core/stroke stroke#)
           true (quil.core/stroke stroke#))

     ;;return the value from body, not from the if after it.

  [color]
  (swap! (internal-state) assoc :current-fill color))

(declare no-fill)

(defn
  ^{:requires-bindings true
    :processing-name "fill()"
