source: project/release/5/ezxdisp/trunk/ezxdisp.scm @ 38155

Last change on this file since 38155 was 38155, checked in by Ivan Raikov, 4 months ago

C5 port of ezxdisp

File size: 4.8 KB
Line 
1;;;;; ezxdisp.scm
2
3(module ezxdisp
4       
5        (ezx-init
6         ezx-quit
7
8         ezx-redraw
9         ezx-resize
10         ezx-wipe
11         ezx-wipe-layer
12         ezx-select-layer
13         ezx-set-background
14         ezx-window-name
15         ezx-isclosed
16         ezx-sensebutton
17         ezx-pushbutton
18         
19         ezx-point-2d
20         ezx-line-2d
21         ezx-lines-2d-lolevel
22         ezx-poly-2d-lolevel
23         ezx-str-2d
24         ezx-rect-2d
25         ezx-fillrect-2d
26         ezx-circle-2d
27         ezx-fillcircle-2d
28         ezx-arc-2d
29         ezx-fillarc-2d
30         
31         ezx-c3d-to-2d
32         ezx-line-3d
33         ezx-set-light-3d
34         ezx-set-view-3d
35         ezx-str-3d
36         ezx-poly-3d-lolevel
37         ezx-circle-3d
38
39         make-ezx-color
40         ezx-next-event
41         ezx-lines-2d
42         ezx-poly-2d
43         ezx-poly-3d
44
45         ezx:BUTTON-PRESS
46         ezx:BUTTON-RELEASE
47         ezx:KEY-PRESS
48         ezx:KEY-RELEASE
49         ezx:MOTION-NOTIFY
50         ezx:CLOSE
51         )
52
53        (import scheme (chicken base)
54                (except (chicken foreign) foreign-declare)
55                srfi-4 bind)
56
57(define-record ezx ptr)
58
59(bind-type ezxp (c-pointer "ezx_t") ezx-ptr make-ezx)
60(bind-type ezxcp f64vector)
61(bind-options export-constants: #t)
62(bind-rename/pattern "_" "-")
63(bind-rename/pattern "EZX-" "ezx:")
64
65#>
66#include "ezxdisp.h"
67
68static int
69get_next_event(ezx_t *e, int *x, int *y, unsigned int *state, unsigned int *kb)
70{
71  ezx_event_t ev;
72
73  ezx_next_event(e, &ev);
74
75  switch(ev.type) {
76  case EZX_BUTTON_PRESS:
77  case EZX_BUTTON_RELEASE:
78    *kb = ev.button.b;
79    *x = ev.button.x;
80    *y = ev.button.y;
81    *state = ev.button.state;
82    break;
83
84  case EZX_KEY_PRESS:
85  case EZX_KEY_RELEASE:
86    *kb = ev.key.k & 0xffff;
87    *x = ev.key.x;
88    *y = ev.key.y;
89    *state = ev.key.state;
90    break;
91
92  case EZX_MOTION_NOTIFY:
93    *x = ev.motion.x;
94    *y = ev.motion.y;
95    *state = ev.motion.state;
96    break;
97  }
98
99  return ev.type;
100}
101<#
102
103
104(bind #<<EOF
105
106enum event_type {
107    EZX_BUTTON_PRESS,
108    EZX_BUTTON_RELEASE,
109    EZX_KEY_PRESS,
110    EZX_KEY_RELEASE,
111    EZX_MOTION_NOTIFY,
112    EZX_CLOSE
113  } ;
114
115ezxp ezx_init(int size_x, int size_y, char *window_name);
116void   ezx_quit(ezxp e);
117void   ezx_redraw(ezxp e);
118void   ezx_resize(ezxp e, int size_x, int size_y);
119void   ezx_wipe(ezxp e);
120void   ezx_wipe_layer(ezxp e, int lay);
121void   ezx_select_layer(ezxp e, int lay);
122void   ezx_set_background(ezxp e, double * col);
123void   ezx_window_name(ezxp e, char *window_name);
124int    ezx_isclosed(ezxp e);
125int    ezx_sensebutton(ezxp e, ___out int *x, ___out int *y);
126int    ezx_pushbutton(ezxp e, ___out int *x, ___out int *y);
127
128// for 2D graphics
129void   ezx_point_2d(ezxp e, int x, int y, double * col);
130void   ezx_line_2d(ezxp e, int x0, int y0, int x1, int y1, double * col, int width);
131void   ezx_lines_2d_lolevel(ezxp e, int *points, int npoints, double * col, int width);
132void   ezx_poly_2d_lolevel(ezxp e,int *points, int npoints, double * col);
133void   ezx_str_2d(ezxp e, double x0, double y0, char *str, double * col);
134void   ezx_rect_2d(ezxp e, int x0, int y0, int x1, int y1, double * col, int width);
135void   ezx_fillrect_2d(ezxp e, double x0, double y0, double x1, double y1, double * col);
136void   ezx_circle_2d(ezxp e, int x, int y, int r, double * col, int width);
137void   ezx_fillcircle_2d(ezxp e, int x0, int y0, int r, double * col);
138void   ezx_arc_2d(ezxp e, int x, int y, int w, int h, double angle1, double angle2, double * col, int width);
139void   ezx_fillarc_2d(ezxp e, int x, int y, int w, int h, double angle1, double angle2, double * col);
140
141// for 3D graphics
142void   ezx_c3d_to_2d(ezxp e, double sx, double sy, double sz, ___out double *dx, ___out double *dy);
143void   ezx_line_3d(ezxp e, double x0, double y0, double z0, double x1, double y1, double z1, double * col, int width);
144void   ezx_set_light_3d(ezxp e, double ex, double ey, double ez);
145void   ezx_set_view_3d(ezxp e, double ex, double ey, double ez, double vx, double vy, double vz, double m);
146void   ezx_str_3d(ezxp e, double x0, double y0, double z0, char *str, double * col);
147void   ezx_poly_3d_lolevel(ezxp e, double *points, double hx, double hy, double hz, int npoints, double * col);
148void   ezx_circle_3d(ezxp e, double x0, double y0, double z0, double r, double * col);
149
150int get_next_event(ezxp e, ___out int *x, ___out int *y, ___out unsigned int *state, ___out unsigned int *kb);
151
152EOF
153)
154
155(define (make-ezx-color r g b)
156  (f64vector r g b) )
157
158(define ezx-next-event get-next-event)
159
160(define (ezx-lines-2d ezx points color width)
161  (ezx-lines-2d-lolevel ezx points (s32vector-length points) color width))
162 
163(define (ezx-poly-2d ezx points color)
164  (ezx-poly-2d-lolevel ezx points (s32vector-length points) color))
165 
166(define (ezx-poly-3d ezx points hx hy hz color)
167  (ezx-poly-3d-lolevel ezx points hx hy hz (s32vector-length points) color))
168 
169
170)
Note: See TracBrowser for help on using the repository browser.