Introduction

Top Draw is a program that renders JavaScript code and creates images that can be installed as your desktop images. The program allows you to create, open, edit, save, and render JavaScript based Top Draw Scripts (TDS, extension ".tds"). Multiple TDS files can be opened and their results can be viewed in a preview window within the application.

Once a desktop image has been rendered, you can install it onto your desktop. You can also create a sample image (1024 x 768) that represents your script, and then upload that image, along with the TDS file which created the image, to the Top Draw website so that others can enjoy your artistic creation!

There is a companion program, Top Draw Viewer, that runs in the menubar periodically to update your desktop images.

If you've programmed using the JavaScript language, then there just a bit of new stuff to learn (See Reference). If you've never programmed before, there are a number of example TDS files with informative comments that are included with this program that you can examine to see how it all works.

Getting Started

When you launch the editor, any previously opened files will be automatically reopened (to prevent this, close the windows before quitting). If no files were opened, a new, Untitled document will be created. It should look like this:

Keywords for Javascript will be highlighted in blue and TDS variables and classes will be highlighted in green. The text in the lower left corner will indicate if the TDS is idle, rendering, or finished rendering. If there were any errors in the file, the line with the problem will be highlighted in red. Correct the change and re-render.

The Preview window will also open. If you choose the "Render" item from the Drawing menu, you'll see the preview window update to show a scaled representation of your desktop, something like this:

If you like this image and want to install it on your desktop, you can choose the "Install onto Desktop" item from the Drawing menu. The image file (or files if you have multiple displays) will be set as your desktop. You can use System Preferences to set your desktop back to the original image if you change your mind. The most recent 10 images will be saved in

 ~/Library/Application Support/Google/TopDraw

Menus

Reference

Top Draw uses the JavaScript language as the basis for it's scripts. It's recommended that you have some familiarity with JavaScript before tackling Top Draw scripting. One source of training is the W3 School's JavaScript site.

In order to create more interesting renderings, several classes of objects and global objects have been added. This section will describe the various classes, their properties and functions, and some examples of how to use them.

Classes

Color, Compositor, Filter, Gradient, GravityPoint, Image, Layer, L-System, Noise, Palette, Particles, Pattern, Point, Randomizer, Rect, Simulator, Storage, Text

Color

An RGB color with alpha. The values of parameters should be floating point values between 0.0 and 1.0. Alpha will default to 1.0 unless otherwise specified.
Constructor
Arguments Description
(none) The red, green, and blue values will be randomly assigned.
color-name: String [, alpha-value: float] Lookup the name (e.g., "white" or "purple") from the list of HTML colors. Optionally set the alpha to alpha-value.
gray-scale: float [, alpha-value: float] Set the red, green, and blue values to gray-scale. Optionally set the alpha to alpha-value.
red-value, green-value, blue-value: float [, alpha-value: float] Set the red, green, and blue values. Optionally set the alpha to alpha-value.
Functions
Name Arguments Description Returns
blend src-color: Color [, blend-amount: float] Create a new Color object that is blend-amount of src-color and (1.0 - blend-amount) of this color. If not specified, blend-amount defaults to 0.5. Color
contrasting [contrast-amount: float] Create a new color based on the current color that is contrasting by contrast-amount. The contrast is created by changing both the hue and the brightness. If not specified, contrast-amount defaults to 0.2. Color
darker [darker-amount: float] Create a new color based on the current color with its brightness adjusted downwards by darker-amount. If not specified, darker-amount defaults to 0.2. Color
lighter [lighter-amount: float] Create a new color based on the current color with its brightness adjusted upwards by lighter-amount. If not specified, lighter-amount defaults to 0.2. Color
vary red-value, green-value, blue-value: float [, alpha-value: float] Create a new Color object based on the current color but vsaried by some random amount. Specify the amount of variation for each channel. If not specified, alpha-value is 0.0 (no variation). Color
Properties
Name Description Type Read/Write
alpha / a The alpha channel used for translucency / opacity. float Read/Write
blue / b The blue channel. float Read/Write
brightness The HSV brightness value. Setting this value may result in the red, green, and/or blue values changing. float Read/Write
green / g The green channel. float Read/Write
hue The HSV hue value. Setting this value may result in the red, green, and/or blue values changing. float Read/Write
red / r The red channel. float Read/Write
saturation The HSV saturation value. Setting this value may result in the red, green, and/or blue values changing. float Read/Write

Compositor

The compositor (global object) will render layers to create the final image. New layers can be created and added to the compositor. The desktop and menubar layers are always present in the compositor.
Functions
Name Arguments Description Returns
addLayer layer: Layer [, compositing-mode: String] Layers are ordered from back to front as they are added.
The compositing-mode is one of: normal (default), multiply, screen, overlay, darken, lighten, color-dodge, color-burn, soft-light, hard-light, difference, exclusion, hue, saturation, color, luminosity, clear, copy, source-in, source-out, source-atop, destination-over, destination-in, destination-out, destination-atop, xor, darker, lighter. Please see Apple's documentation on blend modes for more details.
void
boundsOfScreen index: integer Return a Rect object that is the bounds of the screen specified by zero-based index. The number of screens can be determined by the screenCount property. Rect
Properties
Name Description Type Read/Write
randomSeed The "seed" value for any of the randomization. If you set this value to a fixed value, the random values will be repeatable between executions of the script for any code that occurs after setting the seed. The random seed for each rendering is printed out in the logging window. integer Read/Write
screenCount The number of screeens (displays) on the current system. integer Read-only

Filter

This class encapsulates Core Image filters. Filters can be chained together to produce complex effects. See Apple's documentation for a list of recognized filters.
Constructor
Arguments Description
(none) Creates a dynamic filter that will use the contents of the kernelSource property for rendering.
name: String Specify the name of the filter (e.g., "CIGaussianBlur")
Functions
Name Arguments Description Returns
setKeyValue key: String, value: Number | Color | [Number [, ... Number] Specify a key/value pair. The value can be a Number, Color, or comma separated list of numbers when needing to specify a NSNumber, CIColor, or CIVector for the filter parameter respectively. void
Properties
Name Description Type Read/Write
inputFilter The output of another Filter can be specified as the input to this filter. This allows complex and efficient renderings. The filter should be of a type that expects an inputImage key. Filter Read/Write
kernelSource Specifies the source for the kernel when using a dynamic filter. See the Core Image Kernel language reference for details. String Write-only
name The name of the filter integer Read-only

Gradient

A linear or radial gradient. If the radius property is specified, the gradient will be drawn as a radial gradient.
Constructor
Arguments Description
(none) Empty gradient. Use the addColorStop() function to add colors and locations.
color1, color2: Color [, ... colorN: Color] Specify two or more colors for the gradient. The spacing will be evenly spaced based on the number of colors specified.
Functions
Name Arguments Description Returns
addColorStop color: Color, location: Number Specify a color and location. The location should be in the range (0, 1). The color at location (if any) will be replaced. void
Properties
Name Description Type Read/Write
end The end point of the gradient in pixel space. If the object using the gradient extends past this value, the gradient will continue to output the color at the last location. Point Read/Write
radius The size of the radius to be used at the start (use the "x" property of the Point) and at the end (use the "y" property of the Point). If this value is specified, the gradient will be drawn as a radial gradient. Otherwise, if this value is null or zero, the gradient will be drawn as a linear gradient. Point Read/Write
start The start point of the gradient in pixel space. If the object using the gradient extends before this value, the gradient will continue to output the color at the first location. Point Read/Write

GravityPoint

A source of gravity for the Simulator object.
Constructor
Arguments Description
(none) Empty gravity point. Use the location and gravity properties to modify the behavior.
Properties
Name Description Type Read/Write
gravity The spherical gravitational field scalar. The value will be divided by the square of the distance from this point and the object in the simulator. Point Read/Write
location The location in pixel space of the GravityPoint. Point Read/Write

Image

A raster Image object which can be constructed from an existing Layer or from the source of an image URL.
Constructor
Arguments Description
layer: Layer Create an image with the dimensions of layer.
url: String Create an image with the contents of the image file at url
Functions
Name Arguments Description Returns
exportImage name: String [, type: String] Create a file with the contents of this image. The name can contain an extension which will define the output file type. If specified, the type will control the output file type. Supported formats / extensions are "png", "jpeg", and "tiff". The image file will saved to the folder:
~/Library/Application Support/Google/TopDraw
void
Properties
Name Description Type Read/Write
alpha The alpha compositing value in the range (0, 1) to be used when drawing the image. The default is 1.0. float Read/Write
compositingMode The mode to use when compositing the image. See the discussion of the compositing mode for the Compositor object for more details. The default is "normal". String Read/Write
height Height (in pixels) of the image integer Read-only
width Width (in pixels) of the image integer Read-only

Layer

All drawing in TopDraw takes place in a Layer. Multiple Layer objects can be created and composited. Layer objects can be created, but not composited, so that they can be used as a source for an Image. The properties and functions are very similar to the HTML Canvas object, but with some enhancements.
Constructor
Arguments Description
width, height: integer Create a Layer of width and height dimensions.
bounds: Rect Create a Layer of bounds dimensions.
Functions
Name Arguments Description Returns
applyFilter filter: Filter Apply filter to the layer, replacing the contents of the layer with the output of the filter. The filter output will always be cropped to the dimensions of the Layer. void
arc center: Point, radius, startAngle, endAngle: float Specify the center point, radius, start and end Angles (in Radians). The arc is added to the current path in a clock-wise direction from startAngle to endAngle. void
arcTo p1, p2: Point, radius: float Specify the two tangent points and a radius. The arc is added to the current path. void
beginPath (none) Reset the Layer's path in preparation for adding drawing operations. void
bezierCurveTo c1, c2: Point, endPt: Point Add a cubic Bézier curve to the current path using the two control points and the end point. void
circle [x, y: float] | center: Point, radius: float Add a closed circle to the current path using the specified arguments. void
clearRect rect: Rect Clear the contents of the Layer bounded by rect. void
clip (none) Use the contents of the current path to clip any subsequent drawing operations. A common usage would use the save() and restore() functions around calls to clip(). void
closePath (none) Close the current path before filling or stroking. This is often implicitly done before a fill or stroke. void
coloredRect rect: Rect, bottom-left, top-left, top-right, bottom-right: Color Specify the rectangle and four colors which will be smoothly interpolated over the area of the rectangle. void
colorAtPoint [x, y: float] | point: Point Return the Color that is at the point specified by the arguments. Color
curveFit points: Array [, closed: Boolean [, flatness: float [, tension: float [, bias: float]]]] Given the array of points, draw a smooth Hermite curve between the points, intersecting each point. If specified, the curve can be closed. The flatness argument [0.1, 10] (default: 0.6) sets the amount of error allowed at each point when fitting. Tension [-1, 1] (default: 0) will change the curviness. Bias [-1, 1] (default: 0) will shift the weighting from the first to last point. void
drawImage image: Image [, point: Point | destination: Rect | source, destination: Rect There are three ways to draw an image into a Layer:
  1. Specify a Point and the entire image will be drawn with the lower left corner of the image at that point
  2. Specify a destination Rect for the image. If the dimensions of the image differ from the destination Rect, the image will be scaled to fit.
  3. Specify source and destination Rects for the image. If the source Rect is smaller than the image, a sub-image will be created with those dimensions. If the destination Rect differs from the source Rect, the image will be scaled to fit.
void
drawText text: Text, pt: Point | bounds: Rect Depending on the second argument, either draw the text object at pt without any clipping or wrapping, or draw the text object so that it is contained by bounds. void
ellipse rect: Rect Add an ellipse bounded by rect to the current path. void
fill (none) Fill the current path using the object set as the fillStyle property. void
fillLayer color: Color | gradient: Gradient | pattern: Pattern Fill the layer with the object specified in the arguments. void
fillRect rect: Rect Fill rect using the object set as the fillStyle property. void
fillStroke (none) Fill and stroke the current path based on the fillStyle and strokeStyle properties. void
lineTo [x, y: float] | pt: Point Add a line from the current path position to the point specified by the arguments. void
moveTo [x, y: float] | pt: Point Move the position of the current path to the point specified by the arguments. void
quadraticCurveTo control, end: Point Add a quadratic Bézier curve to the current path, specifying the control and end points. void
rect [x, y, width, height: float] | rect: Rect Add a rectangle to the current path as specified by the arguments. void
reflect location: String [, alpha: float] Reflect the contents of the layer specified by location (valid values: "top", "left", "right", and "bottom") over the contents in the opposite portion, using alpha (value: 1.0 if unspecified). void
restore (none) Restore the graphics state from a previous save() command. void
rotate angle: float Rotate the current graphics transform by angle radians, clockwise if positive, counter-clockwise if negative. Typically, this call is bracketed by save() and restore() calls. void
roundedRect [x, y, width, height: float] | rect: Rect, radius: float Add a rectangle with rounded corners to the current path. The radius may be adjusted so that the rectangle doesn't intersect itself. void
save (none) Save the graphics state (all the properties, any rotations or scaling, and the current clipping). void
scale [x, y: float] | point: Point Scale the current graphics transform by the specified arguments. Negative values will flip drawing coordinates. void
shadow offset: Point, blur-radius: float, color: Color | (none) Specify the offset, blur radius, and color for shadows. The shadow parameters will be applied to subsequent drawing operations. Pass no arguments to disable shadow drawing. void
stroke (none) Stroke the current path using the object set as the strokeStyle property. void
strokeRect rect: Rect Stroke rect using the object set as the strokeStyle property. void
translate [x, y: float] | point: Point Translate the current graphics transform by the specified arguments. void
wavyLineTo end: Point, smoothness: float, randomizer: Randomizer Add a line from the current drawing position to end, randomly displacing points perpendicularly from their expected position. A small smoothness value (closer to 0) will create a chaotic line, whereas larger values (approaching 1) will create a very smooth line. void
Properties
Name Description Type Read/Write
bounds The dimensions of the layer without any positioning details. Setting this value will clear the contents of the Layer. Rect Read/Write
compositingMode The mode to use when compositing to the Layer. See the discussion of the compositing mode for the Compositor object for more details. The default is "normal". String Write-only
fillStyle Specify the object to be used when filling a path in the Layer. Color, Pattern, or Gradient Write-only
frame The location and dimensions of the layer. Setting this value will clear the contents of the Layer. Rect Read/Write
lineCap Specifies how line ends are rendered. Valid values are: "butt" (default), "round", and "square". String Write-only
lineDash Specify an array of pairs of integer numbers representing On and Off drawing Array Write-only
lineJoin Specifies how connected line segments are joined. Valid values are: "miter" (default), "bevel", and "round". String Write-only
lineWidth The rendered width of the line (in pixels). float Write-only
miterLimit The maximum ratio between miter length and the line width when lineJoin is set to "miter". The default is 10. float Write-only
strokeStyle The color to be used when stroking a path. Color Write-only

L-System

L-Systems are a type of algorithmic drawing which uses a string and replacement rules to create complex images. Please read http://en.wikipedia.org/wiki/L-system for more information.
Constructor
Arguments Description
(none) Create an empty L-System.
Functions
Name Arguments Description Returns
addRule rule: String Add the rule to the L-System void
drawInLayer layer: Layer Draw this L-System into the specified layer. The default behavior is to stroke any forward lines. See the drawFunction description on how to change the appearance. void
Properties
Name Description Type Read/Write
angle The angle (radians) to use when making a turn ("+" or "-" rule) float Read/Write
depth The current depth of the system. float Read-only
drawFunction Call this function instead of stroking the line. The L-System object will be passed as the single argument to the function. Function Read/Write
lastRule The last rule evaluated. String Read-only
lastTurn The last direction change evaluated. String Read-only
length The length (in pixels) to use when moving forward. float Read/Write
lengthScale The length will be multiplied by this factor for each iteration. The default is 1.0. float Read/Write
root The root rule of the L-System. String Read/Write

Noise

Generates a block of random values that can be used to create an image. It will be completely random and a very large sized noise may take an appreciable amount of time to create.
Constructor
Arguments Description
width, height: float [, alpha: float [, grayscale: boolean] Specify the width and height of the noise. An optional uniform alpha can be applied and the noise can also be constructed to only have grayscale values.
Functions
Name Arguments Description Returns
drawInLayer layer: Layer Draw this noise into the specified layer. void
Properties
Name Description Type Read/Write
alpha The uniform alpha. float Read/Write
grayscale If true, the image will be grayscale. Otherwise, colored boolean Read/Write
height The height of the noise. integer Read-only
image An image that contains the noise. Image Read-only
width The width of the noise. integer Read-only

Palette

Palettes contain a series of colors. Any Color objects can be added to a palette and Colors can be retrieved randomly or by an index. Additionally, Adobe Kuler colors can be loaded via the Internet.
Constructor
Arguments Description
(none) Creates an empty Palette object.
color: Color[, color2: Color, ...] Creates a Palette with the specified colors.
Functions
Name Arguments Description Returns
addColors color: Color[, color2: Color, ...] Add colors to the Palette. void
addKulerColors "search", query: String, [, themeCount: Integer] Perform a search for the query string. The query can be modified with additional tags -- see Adobe's Documentation regarding the definitions. Each kuler theme contains 5 colors. The default is to load 5 themes, for a total of 25 colors.
Example: this line will search for themes with the term "beach" and load the Palette with the first 10 (or less) found themes, for a total of 50 colors:
addKulerColors("search", "beach", 10);
This requests this from Adobe's site: search:beach.
void
"popular" | "rating" | "recent" | "random":String [, themeCount: Integer] Load the Palette with themes that match one of the allowed search types and limit to an optional number of themes. The default is to load 5 themes. void
colorAtIndex index: Integer Return the Color object at the specified index, or null if there is no color at that index. Color
Properties
Name Description Type Read/Write
count The number of Color objects in the Palette integer Read-only
colors An Array containing all of the Colors in the Palette. Array Read-only
randomColor Returns a randomly chosen Color from the Palette Color Read-only

Particles

A SimulatorObject which emits particles. Each step of the Simulator will update the particles location, appearances, creation, and destruction.
Constructor
Arguments Description
(none) Creates an empty Particles object. Particle colors and GravityPoints can be added.
Functions
Name Arguments Description Returns
addColor color: Color Add a color to be used when new particles are created. void
addGravityPoint gravityPoint: GravityPoint Add a GravityPoint object that will influence the motion of the particles. void
Properties
Name Description Type Read/Write
alphaDelay Specifies the delay (in steps) before the alphaDelta property will be applied to particles. float Read/Write
alphaDelta Specifies the change in alpha value for each step. float Read/Write
accelerationXRandomizer Specifies the Randomizer to be used for the x coordinate when creating new particles. Randomizer Read/Write
accelerationYRandomizer Specifies the Randomizer to be used for the y coordinate when creating new particles. Randomizer Read/Write
gravity Specifies the components of the gravity to apply to particles on each step. Point Read/Write
location Specifies the location of the Particle emissions. Point Read/Write
maxAge The maximum age (in steps) of a particle before its destruction. integer Read/Write
maxParticles The maximum number of active particles. integer Read/Write
trailWidth The width (in pixels) of the trail created by an active particle. float Read/Write
velocityXRandomizer Specifies the Randomizer to be used for the x velocity component when creating new particles. Randomizer Read/Write
velocityYRandomizer Specifies the Randomizer to be used for the y velocity component when creating new particles. Randomizer Read/Write

Pattern

A pattern created with an image that can be used to fill the current path.
Constructor
Arguments Description
image: Image Creates a pattern with image.
Properties
Name Description Type Read/Write
image The image used in the pattern. Image Read/Write
offset Specifies the offset between the image. The default value is the size of the image. Values less than that will cause overlap, and greater values will leave spacing between the images. Point Write-only

Plasma

An etherial plasma cloud.
Constructor
Arguments Description
(none) Creates a Plasma object. The default is colored, non-opqaue, and with a variation of 0.5.
Properties
Name Description Type Read/Write
bottomLeft The starting color used in the bottom left corner of the Plasma. Color Read/Write
bottomRight The starting color used in the bottom right corner of the Plasma. Color Read/Write
grayscale If true, the plasma will be grayscale rather than colored. boolean Read/Write
opaque If true, the plasma will be opaque rather than translucent. boolean Read/Write
topLeft The starting color used in the top left corner of the Plasma. Color Read/Write
topRight The starting color used in the top right corner of the Plasma. Color Read/Write
topRight Specifies the amount of variation from the starting corner colors. The range is (0, 1), with 0 being no variation, and 1 being a boatload of variation. The default is 0.5. float Read/Write

Point

A 2-d Point.
Constructor
Arguments Description
(none) A point with the coordinate value (0, 0).
x, y: float A point with the coordinate value (x, y).
pt: Point A point with the coordinate value (pt.x, pt.y).
Functions
Name Arguments Description Returns
add pt: Point Create a new Point with the summed coordinate values of the current point and pt. Point
distance pt: Point The scalar distance between the current point and pt. float
Properties
Name Description Type Read/Write
x The x axis coorinate value float Read/Write
y The y axis coorinate value float Read/Write

Randomizer

A random value generator.
Constructor
Arguments Description
(none) A randomizer that will return values in the range of (0, 1).
min, max: float A randomizer that will return values in the range of (min, max).
Properties
Name Description Type Read/Write
boolValue / booleanValue A random boolean value. boolean Read-only
floatValue A random floating point value float Read-only
intValue / integerValue A random integer value based on the rounded floating point value. integer Read-only

Rect

A 2-d rectangle.
Constructor
Arguments Description
(none) A rectangle with the coordinate value (0, 0) and dimension (0, 0).
x, y, width, height: float A rectangle with the coordinate value (x, y) and dimension (width, height).
rect: Rect A rectangle with the same coordinate and dimension as rect.
Functions
Name Arguments Description Returns
point point-type: string Create a new Point with the coorinates based on the point-type specifed. Recognized values for point-type are: topleft, topcenter, topright, centerleft, center, centerright, bottomleft, bottomcenter, and bottomright. A value of random will use one of the aforementioned point-types. Point
inset x-or-uniform: float [, y: float] Create a new rectangle with the coorinates and dimensions either uniformly inset or inset by different amounts in the x and y axes. pt. Rect
intersect rect: Rect Create a new rectangle defined by the intersection of the current rectangle and rect. Rect
union rect: Rect Create a new rectangle defined by the union of the current rectangle with rect. Rect
Properties
Name Description Type Read/Write
height The height of the rectangle float Read/Write
isEmpty Returns true if the size of the rect is (0, 0) boolean Read-only
midX The midpoint of the x axis side of the rectangle. float Read-only
midY The midpoint of the y axis side of the rectangle. float Read-only
width The width of the rectangle float Read/Write
x The x axis coordinate value float Read/Write
y The y axis coordinate value float Read/Write

Simulator

Simulate physically-based drawing with different SimulatorObjects.
Constructor
Arguments Description
(none) An empty Simulator object. Add SimulatorObjects (e.g., Particles) using the addSimulatorObject() function.
Functions
Name Arguments Description Returns
addSimulatorObject obj: SimulatorObject Add a SimulatorObject to the simulator. void
runInLayer layer: Layer, step-count: integer Run the Simulator for step-count steps, rendering the output to layer. void
Properties
Name Description Type Read/Write
timeStep The amount of simulator time to pass with each step. The default value is 0.166. Large values may produce un-smooth results in the rendering float Read/Write

Storage

The Storage class provides a means of saving persistant information across invocation of a script. A number or string can be associated with a string key. The data is saved in:
~/Library/Application Support/Google/TopDraw/Storage
Constructor
Arguments Description
(none) A Storage object which is associated with the name of the script file.
identifier: String A Storage object associated with identifier
Functions
Name Arguments Description Returns
setKeyValue key: String, value: Number | String Set the value for key. void
keyValue key: String Return the value for key. Number | String
Properties
Name Description Type Read/Write
allKeys An Array of all of the keys. Array Read-only
allValues An Array of all of the values. Array Read-only

Text

The Text object contains a string and appearance information (e.g., color, font).
Constructor
Arguments Description
(none) An empty Text object.
string: String A Text object with the inital string value set.
Functions
Name Arguments Description Returns
boundsForRect rect: Rect Given rect, return the bounds of the rendered string that will fit the width of rect, but (potentially) overflow out the bottom. Rect
Properties
Name Description Type Read/Write
backgroundColor The color to use for the text background. Color Read/Write
bounds The bounds of the string when rendered. Rect Read-only
fontName The name of the font. This is typically also known as the "family" name (e.g., Helvetica, Courier). To use a styled varient (e.g., bold), use the fontStyle property. String Read/Write
fontSize The point size of the font. float Read/Write
fontStyle The style of the font. Allowed values are: bold, italic, condensed, expanded. The values can be combined. If the font specified in the fontName does not exist with this style, the unstyled variant will be chosen String Write-only
foregroundColor The color to use for the text foreground. Color Read/Write

Global Objects

Name Description Class Read/Write
compositor The Compositor object for all of the desktop. Compositor Read-only
desktop A Layer sized to covers all of the desktop. If there are multiple displays and they are arranged in a non-rectangular pattern, the desktop will be sized to be the smallest rectangle that covers all of them. The desktop is placed at the bottom of all other Layers in the global compositor. Layer Read-only
log(str:String) Display str in the Logging window Function n/a
menubar A Layer sized and positioned to be underneath the menubar. If nothing is drawn into this Layer, it will be transparent and will not affect the desktop image. Otherwise, the menubar will be placed on top of all other Layers in the global compositor. If your Desktop & Screen Saver System Preferences are set to use a Translucent Menu Bar, the color in this layer will show through and look really cool. Layer Read-only

Requirements

Top Draw requires a Macintosh computer running Mac OS X 10.5 (Leopard) or later.

Miscellaneous

Top Draw was written by Dan Waylonis in 2008.

The most up-to-date versions can be found at Google's open source repository, as the Top Draw project.

The program is open source and written in Objective-C using Apple's Xcode IDE. It uses the JavaScriptCore, Quartz, and CoreImage frameworks.