You are looking at historical revision 14802 of this page. It may differ significantly from its current revision.

ezxdisp

Description

A simple graphics library for X11.

Author

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

Requirements

easyffi

Download

ezxdisp.egg

Documentation

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 NPOINTS COLOR WIDTH)
[procedure] (ezx-poly-2d EZX POINTS NPOINTS COLOR)

The POINTS argument should be an SRFI-4 s32vector containing the X and Y 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 N 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 the type of the event, followed by several event-specific values. Depending on the type of the event, the following values can be returned:

ezx:BUTTON_PRESS or ezx:BUTTON_RELEASE
the returned values are
 {{(TYPE X Y STATE BUTTON)}}
ezx:KEY_PRESS or ezx:KEY_RELEASE
the returned values are
 {{(TYPE X Y STATE KEY)}}
ezx:MOTION_NOTIFY
the returned values are
 {{(TYPE X Y STATE)}}
ezx:CLOSE
the returned values are
 {{(TYPE)}}
[procedure] (ezx-event-pending EZX)

Returns true if events are pending, false otherwise.

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.

Colors

[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.

Examples

Examples:

(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) 1)
(ezx-redraw ezx)

(let loop ()
  (let-values ([(b _ _) (ezx-pushbutton ezx)])
    (when (zero? b) (loop)) ) )

(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.

Changelog

License

 This program is free software; you can redistribute it and/or modify
 it under the terms of the GNU 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
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 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