c74bd02b3297dd50f92c15d4d372f9b3fcb8d3a8
[retroray] / src / app.h
1 /*
2 RetroRay - integrated standalone vintage modeller/renderer
3 Copyright (C) 2023  John Tsiombikas <nuclear@mutantstargoat.com>
4
5 This program is free software: you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation, either version 3 of the License, or
8 (at your option) any later version.
9
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13 GNU General Public License for more details.
14
15 You should have received a copy of the GNU General Public License
16 along with this program.  If not, see <https://www.gnu.org/licenses/>.
17 */
18 #ifndef APP_H_
19 #define APP_H_
20
21 enum {
22         KEY_ESC = 27,
23         KEY_DEL = 127,
24         KEY_F1          = 256,
25         KEY_F2, KEY_F3, KEY_F4, KEY_F5, KEY_F6, KEY_F7,
26         KEY_F8, KEY_F9, KEY_F10, KEY_F11, KEY_F12,
27         KEY_UP, KEY_DOWN, KEY_LEFT, KEY_RIGHT,
28         KEY_PGUP, KEY_PGDOWN,
29         KEY_HOME, KEY_END,
30         KEY_INS
31 };
32
33 enum {
34         KEY_MOD_SHIFT   = 1,
35         KEY_MOD_CTRL    = 4,
36         KEY_MOD_ALT     = 8
37 };
38
39
40 struct app_screen {
41         const char *name;
42
43         int (*init)(void);
44         void (*destroy)(void);
45         int (*start)(void);
46         void (*stop)(void);
47         void (*display)(void);
48         void (*reshape)(int, int);
49         void (*keyboard)(int, int);
50         void (*mouse)(int, int, int, int);
51         void (*motion)(int, int);
52         void (*sball_motion)(int, int, int);
53         void (*sball_rotate)(int, int, int);
54         void (*sball_button)(int, int);
55 };
56
57 extern int mouse_x, mouse_y, mouse_state[3];
58 extern unsigned int modkeys;
59 extern int win_width, win_height;
60 extern float win_aspect;
61 extern int fullscr;
62
63 extern long time_msec;
64 extern struct app_screen *cur_scr;
65 extern struct app_screen scr_model, scr_rend;
66
67 struct font;
68 extern struct font *uifont;
69
70 int app_init(void);
71 void app_shutdown(void);
72
73 void app_display(void);
74 void app_reshape(int x, int y);
75 void app_keyboard(int key, int press);
76 void app_mouse(int bn, int st, int x, int y);
77 void app_motion(int x, int y);
78 void app_sball_motion(int x, int y, int z);
79 void app_sball_rotate(int x, int y, int z);
80 void app_sball_button(int bn, int st);
81
82 void app_chscr(struct app_screen *scr);
83
84 /* defined in main.c */
85 long app_getmsec(void);
86 void app_redisplay(void);
87 void app_swap_buffers(void);
88 void app_quit(void);
89 void app_resize(int x, int y);
90 void app_fullscreen(int fs);
91 void app_vsync(int vsync);
92
93 #endif  /* APP_H_ */