Graphics library for Mercury, including OpenGL bindings, TGA image reading, and X11, Win32, and SDL2 windowing and input.
リビジョン | 1afe83fba3c159276d8642340f13928a38535903 (tree) |
---|---|
日時 | 2022-04-11 00:22:25 |
作者 | AlaskanEmily <emily@alas...> |
コミッター | AlaskanEmily |
Make the saffron_window native exports for window_event not use maybes.
@@ -282,11 +282,11 @@ create_window_error = io.error(io.make_io_error("Could not create Glow window")) | ||
282 | 282 | if(Glow_GetEvent(Win, &event)){ |
283 | 283 | switch(event.type){ |
284 | 284 | case eGlowQuit: |
285 | - Event = Saffron_CreateQuitEvent(); | |
285 | + Event = Saffron_CreateYesEvent(Saffron_CreateQuitEvent()); | |
286 | 286 | break; |
287 | 287 | case eGlowKeyboardPressed: |
288 | 288 | if(SaffronGlow_StringIsSpecialKey(event.value.key, &tmp)){ |
289 | - Event = Saffron_CreateSpecialKeyPressEvent(tmp); | |
289 | + Event = Saffron_CreateYesEvent(Saffron_CreateSpecialKeyPressEvent(tmp)); | |
290 | 290 | } |
291 | 291 | else{ |
292 | 292 | int width; |
@@ -297,13 +297,13 @@ create_window_error = io.error(io.make_io_error("Could not create Glow window")) | ||
297 | 297 | Event = Saffron_CreateNoEvent(); |
298 | 298 | } |
299 | 299 | else{ |
300 | - Event = Saffron_CreateKeyPressEvent(c); | |
300 | + Event = Saffron_CreateYesEvent(Saffron_CreateKeyPressEvent(c)); | |
301 | 301 | } |
302 | 302 | } |
303 | 303 | break; |
304 | 304 | case eGlowKeyboardReleased: |
305 | 305 | if(SaffronGlow_StringIsSpecialKey(event.value.key, &tmp)){ |
306 | - Event = Saffron_CreateSpecialKeyReleaseEvent(tmp); | |
306 | + Event = Saffron_CreateYesEvent(Saffron_CreateSpecialKeyReleaseEvent(tmp)); | |
307 | 307 | } |
308 | 308 | else{ |
309 | 309 | int width; |
@@ -311,36 +311,36 @@ create_window_error = io.error(io.make_io_error("Could not create Glow window")) | ||
311 | 311 | if(width <= 0){ |
312 | 312 | /* TODO: We should fetch another event. */ |
313 | 313 | REPORT_INVALID_KEY(event.value.key); |
314 | - Event = Saffron_CreateNoEvent(); | |
314 | + Event = Saffron_CreateYesEvent(Saffron_CreateNoEvent()); | |
315 | 315 | } |
316 | 316 | else{ |
317 | - Event = Saffron_CreateKeyReleaseEvent(c); | |
317 | + Event = Saffron_CreateYesEvent(Saffron_CreateKeyReleaseEvent(c)); | |
318 | 318 | } |
319 | 319 | } |
320 | 320 | break; |
321 | 321 | case eGlowMousePressed: |
322 | 322 | SaffronGlow_ConvertButton(&tmp, event.value.mouse.button); |
323 | - Event = Saffron_CreateMousePressEvent( | |
323 | + Event = Saffron_CreateYesEvent(Saffron_CreateMousePressEvent( | |
324 | 324 | tmp, |
325 | 325 | event.value.mouse.xy[0], |
326 | - event.value.mouse.xy[1]); | |
326 | + event.value.mouse.xy[1])); | |
327 | 327 | break; |
328 | 328 | case eGlowMouseReleased: |
329 | 329 | SaffronGlow_ConvertButton(&tmp, event.value.mouse.button); |
330 | - Event = Saffron_CreateMouseReleaseEvent( | |
330 | + Event = Saffron_CreateYesEvent(Saffron_CreateMouseReleaseEvent( | |
331 | 331 | tmp, |
332 | 332 | event.value.mouse.xy[0], |
333 | - event.value.mouse.xy[1]); | |
333 | + event.value.mouse.xy[1])); | |
334 | 334 | break; |
335 | 335 | case eGlowMouseMoved: |
336 | - Event = Saffron_CreateMotionEvent( | |
336 | + Event = Saffron_CreateYesEvent(Saffron_CreateMotionEvent( | |
337 | 337 | event.value.mouse.xy[0], |
338 | - event.value.mouse.xy[1]); | |
338 | + event.value.mouse.xy[1])); | |
339 | 339 | break; |
340 | 340 | case eGlowResized: |
341 | - Event = Saffron_CreateResizeEvent( | |
341 | + Event = Saffron_CreateYesEvent(Saffron_CreateResizeEvent( | |
342 | 342 | event.value.resize[0], |
343 | - event.value.resize[1]); | |
343 | + event.value.resize[1])); | |
344 | 344 | break; |
345 | 345 | default: |
346 | 346 | MR_assert(0); |
@@ -113,6 +113,31 @@ | ||
113 | 113 | :- implementation. |
114 | 114 | %==============================================================================% |
115 | 115 | |
116 | +:- pragma foreign_code("Java", | |
117 | + " | |
118 | +static public Window_event_0 CreateMouseEvent(Button_0 button, int x, int y, boolean press){ | |
119 | + if(press) | |
120 | + return CreateMousePressEvent(button, x, y); | |
121 | + else | |
122 | + return CreateMouseReleaseEvent(button, x, y); | |
123 | +} | |
124 | +static public Window_event_0 CreateKeyEvent(int key, boolean press){ | |
125 | + if(press) | |
126 | + return CreateKeyPressEvent(key); | |
127 | + else | |
128 | + return CreateKeyReleaseEvent(key); | |
129 | +} | |
130 | + | |
131 | +static public Window_event_0 CreateSpecialKeyEvent(Special_key_0 key, boolean press){ | |
132 | + if(press) | |
133 | + return CreateSpecialKeyPressEvent(key); | |
134 | + else | |
135 | + return CreateSpecialKeyReleaseEvent(key); | |
136 | +} | |
137 | + "). | |
138 | + | |
139 | +%------------------------------------------------------------------------------% | |
140 | + | |
116 | 141 | :- pragma foreign_export_enum("C", button/0, |
117 | 142 | [prefix("SAFFRON_BUTTON_"), uppercase]). |
118 | 143 |
@@ -148,54 +173,62 @@ create_no_event = maybe.no. | ||
148 | 173 | |
149 | 174 | %------------------------------------------------------------------------------% |
150 | 175 | |
151 | -:- func create_quit_event = (maybe.maybe(window_event)::out) is det. | |
152 | -create_quit_event = maybe.yes(quit). | |
153 | -:- pragma foreign_export("C", create_quit_event = (out), "Saffron_CreateQuitEvent"). | |
154 | -:- pragma foreign_export("Java", create_quit_event = (out), "CreateQuitEvent"). | |
176 | +:- func create_yes_event(window_event::di) = (maybe.maybe(window_event)::uo) is det. | |
177 | +create_yes_event(E) = maybe.yes(E). | |
178 | +:- pragma foreign_export("C", create_yes_event(di) = (uo), "Saffron_CreateYesEvent"). | |
179 | +:- pragma foreign_export("Java", create_yes_event(di) = (uo), "CreateYesEvent"). | |
155 | 180 | |
156 | 181 | %------------------------------------------------------------------------------% |
157 | 182 | |
158 | -:- func create_press_event(character::in) = (maybe.maybe(window_event)::uo) is det. | |
159 | -create_press_event(C) = maybe.yes(press(key(CC))) :- builtin.copy(C, CC). | |
160 | -:- pragma foreign_export("C", create_press_event(in) = (uo), "Saffron_CreateKeyPressEvent"). | |
161 | -:- pragma foreign_export("Java", create_press_event(in) = (uo), "CreateKeyPressEvent"). | |
183 | +:- func create_quit_event = (window_event::uo) is det. | |
184 | +create_quit_event = quit. | |
185 | +:- pragma foreign_export("C", create_quit_event = (uo), "Saffron_CreateQuitEvent"). | |
186 | +:- pragma foreign_export("Java", create_quit_event = (uo), "CreateQuitEvent"). | |
162 | 187 | |
163 | 188 | %------------------------------------------------------------------------------% |
164 | 189 | |
165 | -:- func create_release_event(character::in) = (maybe.maybe(window_event)::uo) is det. | |
166 | -create_release_event(C) = maybe.yes(release(key(CC))) :- builtin.copy(C, CC). | |
167 | -:- pragma foreign_export("C", create_release_event(in) = (uo), "Saffron_CreateKeyReleaseEvent"). | |
168 | -:- pragma foreign_export("Java", create_release_event(in) = (uo), "CreateKeyReleaseEvent"). | |
190 | +:- func create_press_event(character::di) = (window_event::uo) is det. | |
191 | +create_press_event(C) = press(key(C)). | |
192 | +:- pragma foreign_export("C", create_press_event(di) = (uo), "Saffron_CreateKeyPressEvent"). | |
193 | +:- pragma foreign_export("Java", create_press_event(di) = (uo), "CreateKeyPressEvent"). | |
169 | 194 | |
170 | 195 | %------------------------------------------------------------------------------% |
171 | 196 | |
172 | -:- func create_special_press_event(special_key::in) = (maybe.maybe(window_event)::uo) is det. | |
173 | -create_special_press_event(C) = maybe.yes(press(special_key(CC))) :- builtin.copy(C, CC). | |
197 | +:- func create_release_event(character::di) = (window_event::uo) is det. | |
198 | +create_release_event(C) = release(key(C)). | |
199 | +:- pragma foreign_export("C", create_release_event(di) = (uo), "Saffron_CreateKeyReleaseEvent"). | |
200 | +:- pragma foreign_export("Java", create_release_event(di) = (uo), "CreateKeyReleaseEvent"). | |
201 | + | |
202 | +%------------------------------------------------------------------------------% | |
203 | + | |
204 | +:- func create_special_press_event(special_key::in) = (window_event::uo) is det. | |
205 | +create_special_press_event(C) = press(special_key(CC)) :- | |
206 | + builtin.copy(C, CC). | |
174 | 207 | :- pragma foreign_export("C", create_special_press_event(in) = (uo), "Saffron_CreateSpecialKeyPressEvent"). |
175 | 208 | :- pragma foreign_export("Java", create_special_press_event(in) = (uo), "CreateSpecialKeyPressEvent"). |
176 | 209 | |
177 | 210 | %------------------------------------------------------------------------------% |
178 | 211 | |
179 | -:- func create_special_release_event(special_key::in) = (maybe.maybe(window_event)::uo) is det. | |
180 | -create_special_release_event(C) = maybe.yes(release(special_key(CC))) :- builtin.copy(C, CC). | |
212 | +:- func create_special_release_event(special_key::in) = (window_event::uo) is det. | |
213 | +create_special_release_event(C) = release(special_key(CC)) :- | |
214 | + builtin.copy(C, CC). | |
181 | 215 | :- pragma foreign_export("C", create_special_release_event(in) = (uo), "Saffron_CreateSpecialKeyReleaseEvent"). |
182 | 216 | :- pragma foreign_export("Java", create_special_release_event(in) = (uo), "CreateSpecialKeyReleaseEvent"). |
183 | 217 | |
184 | 218 | %------------------------------------------------------------------------------% |
185 | 219 | |
186 | -:- func create_press_event(button::in, int::in, int::in) = (maybe.maybe(window_event)::uo) is det. | |
187 | -create_press_event(B, X, Y) = maybe.yes(press(BC, XC, YC)) :- | |
220 | +:- func create_press_event(button::in, int::in, int::in) = (window_event::uo) is det. | |
221 | +create_press_event(B, X, Y) = press(BC, XC, YC) :- | |
188 | 222 | builtin.copy(B, BC), |
189 | 223 | builtin.copy(X, XC), |
190 | 224 | builtin.copy(Y, YC). |
191 | - | |
192 | 225 | :- pragma foreign_export("C", create_press_event(in, in, in) = (uo), "Saffron_CreateMousePressEvent"). |
193 | 226 | :- pragma foreign_export("Java", create_press_event(in, in, in) = (uo), "CreateMousePressEvent"). |
194 | 227 | |
195 | 228 | %------------------------------------------------------------------------------% |
196 | 229 | |
197 | -:- func create_release_event(button::in, int::in, int::in) = (maybe.maybe(window_event)::uo) is det. | |
198 | -create_release_event(B, X, Y) = maybe.yes(release(BC, XC, YC)) :- | |
230 | +:- func create_release_event(button::in, int::in, int::in) = (window_event::uo) is det. | |
231 | +create_release_event(B, X, Y) = release(BC, XC, YC) :- | |
199 | 232 | builtin.copy(B, BC), |
200 | 233 | builtin.copy(X, XC), |
201 | 234 | builtin.copy(Y, YC). |
@@ -204,8 +237,8 @@ create_release_event(B, X, Y) = maybe.yes(release(BC, XC, YC)) :- | ||
204 | 237 | |
205 | 238 | %------------------------------------------------------------------------------% |
206 | 239 | |
207 | -:- func create_resize_event(int::in, int::in) = (maybe.maybe(window_event)::uo) is det. | |
208 | -create_resize_event(W, H) = maybe.yes(resize(WC, HC)) :- | |
240 | +:- func create_resize_event(int::in, int::in) = (window_event::uo) is det. | |
241 | +create_resize_event(W, H) = resize(WC, HC) :- | |
209 | 242 | builtin.copy(W, WC), |
210 | 243 | builtin.copy(H, HC). |
211 | 244 | :- pragma foreign_export("C", create_resize_event(in, in) = (uo), "Saffron_CreateResizeEvent"). |
@@ -213,8 +246,8 @@ create_resize_event(W, H) = maybe.yes(resize(WC, HC)) :- | ||
213 | 246 | |
214 | 247 | %------------------------------------------------------------------------------% |
215 | 248 | |
216 | -:- func create_motion_event(int::in, int::in) = (maybe.maybe(window_event)::uo) is det. | |
217 | -create_motion_event(X, Y) = maybe.yes(motion(XC, YC)) :- | |
249 | +:- func create_motion_event(int::in, int::in) = (window_event::uo) is det. | |
250 | +create_motion_event(X, Y) = motion(XC, YC) :- | |
218 | 251 | builtin.copy(X, XC), |
219 | 252 | builtin.copy(Y, YC). |
220 | 253 | :- pragma foreign_export("C", create_motion_event(in, in) = (uo), "Saffron_CreateMotionEvent"). |