   ([s] (.scale *applet* (float s)))
   ([sx sy] (.scale *applet* (float sx) (float sy))))
 
-(defn screen-x
+(defn- current-screen
+  []
+  (let [default-toolkit (java.awt.Toolkit/getDefaultToolkit)]
+    (.getScreenSize default-toolkit)))
+
+(def ^{:private true} orig-screen-width
+  (let [screen (current-screen)]
+    (.width screen)))
+
+(defn
+  ^{:requires-bindings false
+    :processing-name "screen.width"
+    :category "Environment"
+    :subcategory nil
+    :added "1.0"}
+  screen-width
+  "Returns the width of the main screen in pixels."
+  []
+  orig-screen-width)
+
+(def ^{:private true} orig-screen-height
+  (let [screen (current-screen)]
+    (.height screen)))
+
+(defn
+  ^{:requires-bindings false
+    :processing-name "screen.height"
+    :category "Environment"
+    :subcategory nil
+    :added "1.0"}
+  screen-height
+  "Returns the height of the main screen in pixels."
+  []
+  orig-screen-height)
+
+(defn
+  ^{:requires-bindings true
+    :processing-name "screenX()"
+    :category "Lights, Camera"
+    :subcategory "Coordinates"
+    :added "1.0"}
+  screen-x
   "Takes a three-dimensional x, y, z position and returns the x value
   for where it will appear on a (two-dimensional) screen, once
   affected by translate, scale or any other transformations"
   [x y z]
   (.screenX *applet* (float x) (float y) (float z)))
 
-(defn screen-y
+(defn
+  ^{:requires-bindings true
+    :processing-name "screenY()"
+    :category "Lights, Camera"
+    :subcategory "Coordinates"
+    :added "1.0"}
+  screen-y
   "Takes a three-dimensional x, y, z position and returns the y value
   for where it will appear on a (two-dimensional) screen, once
   affected by translate, scale or any other transformations"
   [x y z]
   (.screenY *applet* (float x) (float y) (float z)))
 
-(defn screen-z
+(defn
+  ^{:requires-bindings true
+    :processing-name "screenZ()"
+    :category "Lights, Camera"
+    :subcategory "Coordinates"
+    :added "1.0"}
+  screen-z
   "Given an x, y, z coordinate, returns its z value.
    This value can be used to determine if an x, y, z coordinate is in
    front or in back of another (x, y, z) coordinate. The units are

  [angle]
  (.rotateZ *applet* (float angle)))

(defn round
  "Calculates the integer closest to the value parameter. For example,
  round(9.2) returns the value 9."
  [val]
  (PApplet/round (float val)))

(defn saturation
  "Extracts the saturation value from a color."
  [c]
  (.saturation *applet* (int c)))

(defn save
  "Saves an image from the display window. Images are saved in TIFF,
  TARGA, JPEG, and PNG format depending on the extension within the
  filename parameter. For example, image.tif will have a TIFF image

     (.perspective *applet* (float fovy) (float aspect)
                   (float z-near) (float z-far))))

(defn
  ^{:requires-bindings true
    :processing-name "point()"
    :category "Shape"
    :subcategory "2D Primitives"
    :added "1.0"}
  point
  "Draws a point, a coordinate in space at the dimension of one
  pixel. The first parameter is the horizontal value for the point,
  the second value is the vertical value for the point, and the
