Outdated egg!

This is an egg for CHICKEN 4, the unsupported old release. You're almost certainly looking for the CHICKEN 5 version of this egg, if it exists.

If it does not exist, there may be equivalent functionality provided by another egg; have a look at the egg index. Otherwise, please consider porting this egg to the current version of CHICKEN.


  1. Outdated egg!
  2. ezxdisp
    1. Description
    2. Author
    3. Requirements
    4. Documentation
      1. Initialize/Finalize a window
      2. Update the graphics in the window
      3. Erase the graphics in the window/layer
      4. Get the pointer coordinates
      5. Draw 2D graphics
      6. Draw 3D graphics
      7. Event handling
      8. Miscellaneous functions
      9. Colors
    5. Examples
    6. Changelog
    7. License


A simple graphics library for X11.


n-sibata and Morihiko Tamai, packaged for CHICKEN by felix winkelmann.




ezxdisp is a simple graphics library for 2D/3D graphical applications. (The official distribution can be found here).

Initialize/Finalize a window

[procedure] (ezx-init SIZE_X SIZE_Y WINDOW_NAME)

This procedure returns a EZX object all other procedures accept.

[procedure] (ezx-quit EZX)

Update the graphics in the window

[procedure] (ezx-redraw EZX)

Erase the graphics in the window/layer

[procedure] (ezx-wipe EZX)
[procedure] (ezx-wipe-layer EZX LAYER)

LAYER should be an exact integer between 0 and 8.

Get the pointer coordinates

[procedure] (ezx-sensebutton EZX)

Returns the current pointer coordinates as three values: BUTTON, X and Y

[procedure] (ezx-pushbutton EZX)

Block until an event is received. Returns three values: BUTTON, X and Y

The BUTTON result is 1, 2 or 3 for the first, second and third mouse button, respectively. The button number is additionally bitwise OR'd with 8 if the shift key is pressed and with 16 if the control key is pressed.

Draw 2D graphics

[procedure] (ezx-point-2d EZX X Y COLOR)
[procedure] (ezx-line-2d EZX X0 Y0 X1 Y1 COLOR WIDTH)
[procedure] (ezx-lines-2d EZX POINTS COLOR WIDTH)
[procedure] (ezx-poly-2d EZX POINTS COLOR)

The POINTS argument should be an SRFI-4 s32vector of the form [X1 Y1 ... Xn Yn] where X and Y are the coordinates of each point.

[procedure] (ezx-rect-2d EZX X0 Y0 X1 Y1 COLOR WIDTH)
[procedure] (ezx-fillrect-2d EZX X0 Y0 X1 Y1 COLOR)
[procedure] (ezx-circle-2d EZX X0 Y0 R COLOR WIDTH)
[procedure] (ezx-fillcircle-2d EZX X0 Y0 R COLOR)
[procedure] (ezx-str-2d EZX X0 Y0 STRING COLOR)

Draw 3D graphics

[procedure] (ezx-set-light-3d EZX EX EY EZ)
[procedure] (ezx-set-view-3d EZX EX EY EZ VX VY VZ M)
[procedure] (ezx-c3d-to-2d EZX SX SY SZ)

Returns two values, DX and DY.

[procedure] (ezx-line-3d EZX X0 Y0 Z0 X1 Y1 Z1 COLOR WIDTH)
[procedure] (ezx-str-3d EZX X0 Y0 Z0 STRING COLOR)
[procedure] (ezx-poly-3d EZX POINTS HX HY HZ COLOR)
[procedure] (ezx-circle-3d EZX X0 Y0 Z0 R COLOR)

The POINTS argument should be a SRFI-4 f64vector containing the X, Y and Z coordinates of each point.

Event handling

[procedure] (ezx-next-event EZX)

Removes the next event from the event queue and returns the event-specific information. If there is no event data in the event queue, this function blocks until the next event occurs. The procedure returns 5 values: the type of the event, the X- and Y-coordinates of the mouse pointer at the time of the event, the button- or keyboard-state mask and the button- or key-code of the event.

The following variables contain the event-types that may occur:

These button-codes are defined:

Code Button
1 left
2 middle
3 right
4 wheel up
5 wheel down

State mask values that may be returned:

Mask State
1 shift key
2 control key
4 left button
8 middle button
16 right button

For keyboard events, some special keys will return a platform independent keycode:

Home #xff50
Left #xff51
Up #xff52
Right #xff53
Down #xff54

The result values will be undefined for events for which they are not used. This table summarizes what results are valid:

Event Results
ezx:BUTTON-PRESS ezx:BUTTON-RELEASE x, y, state, k/b
ezx:KEY-PRESS ezx:KEY-RELEASE x, y, state, k/b
ezx:MOTION-NOTIFY x, y, state

Miscellaneous functions

[procedure] (ezx-select-layer EZX LAYER)

Focuses on the layer.

[procedure] (ezx-raise-window EZX)

Raises the window.

[procedure] (ezx-window-name EZX STRING)

Sets a name of the window.

[procedure] (ezx-set-background EZX COLOR)

Sets the background color of the window.


[procedure] (make-ezx-color R G B)

This procedure returns a "color object", which is internally encoded as a f64vector. The red, green and blue components should be between 0 and 1.


(use ezxdisp)

(define ezx (ezx-init 100 100 "Hello, ezxdisp"))
(ezx-set-background ezx (make-ezx-color 1 1 1))
(ezx-fillcircle-2d ezx 50 50 25 (make-ezx-color 1 0 0))
(ezx-redraw ezx)

(let loop ()
  (let-values (((b _ _) (ezx-pushbutton ezx)))

(ezx-quit ezx)

A more elaborate example is in the egg distribution in a file named 3d_clock.scm, which displays an animated 3D-clock.



 This program is free software; you can redistribute it and/or modify
 it under the terms of the GNU Lesser General Public License as
 published by the Free Software Foundation; either version 2 of the
 License, or (at your option) any later version.
 This program is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 GNU General Public License for more details.
 You should have received a copy of the GNU General Public License
 along with this program; if not, write to the Free Software
 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA