Wed, 02 Jul 2025 23:21:17 +0200
resolve TODOs regarding input.h
a) mouse position must be integer, because it can be negative (though rarely)
b) we should not trade "access complexity" for space in the scancodes array
0 | 1 | /* |
2 | * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. | |
3 | * Copyright 2023 Mike Becker. All rights reserved. | |
4 | * | |
5 | * Redistribution and use in source and binary forms, with or without | |
6 | * modification, are permitted provided that the following conditions are met: | |
7 | * | |
8 | * 1. Redistributions of source code must retain the above copyright | |
9 | * notice, this list of conditions and the following disclaimer. | |
10 | * | |
11 | * 2. Redistributions in binary form must reproduce the above copyright | |
12 | * notice, this list of conditions and the following disclaimer in the | |
13 | * documentation and/or other materials provided with the distribution. | |
14 | * | |
15 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | |
16 | * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | |
17 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | |
18 | * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE | |
19 | * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR | |
20 | * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF | |
21 | * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS | |
22 | * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN | |
23 | * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | |
24 | * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE | |
25 | * POSSIBILITY OF SUCH DAMAGE. | |
26 | */ | |
27 | ||
106
895f92cff6b8
bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
105
diff
changeset
|
28 | #include "ascension/error.h" |
6
302971e8599b
move window related stuff to its own unit
Mike Becker <universe@uap-core.de>
parents:
3
diff
changeset
|
29 | #include "ascension/window.h" |
7 | 30 | #include "ascension/context.h" |
0 | 31 | |
6
302971e8599b
move window related stuff to its own unit
Mike Becker <universe@uap-core.de>
parents:
3
diff
changeset
|
32 | #include <GL/glew.h> |
302971e8599b
move window related stuff to its own unit
Mike Becker <universe@uap-core.de>
parents:
3
diff
changeset
|
33 | |
149
560772519ff9
resolve east-west conflict
Mike Becker <universe@uap-core.de>
parents:
121
diff
changeset
|
34 | void asc_window_settings_init_defaults(AscWindowSettings *settings) { |
3 | 35 | settings->dimensions.width = 800; |
36 | settings->dimensions.height = 600; | |
68
823c03733e42
add mouse and window focus - resolves #382
Mike Becker <universe@uap-core.de>
parents:
65
diff
changeset
|
37 | settings->fullscreen = false; |
44
b3da4096c607
create own compilation unit for GL context - fixes shader not being created per context
Mike Becker <universe@uap-core.de>
parents:
41
diff
changeset
|
38 | settings->glsettings.depth_size = 24; |
b3da4096c607
create own compilation unit for GL context - fixes shader not being created per context
Mike Becker <universe@uap-core.de>
parents:
41
diff
changeset
|
39 | settings->glsettings.vsync = 1; |
b3da4096c607
create own compilation unit for GL context - fixes shader not being created per context
Mike Becker <universe@uap-core.de>
parents:
41
diff
changeset
|
40 | settings->glsettings.gl_major_version = 4; |
b3da4096c607
create own compilation unit for GL context - fixes shader not being created per context
Mike Becker <universe@uap-core.de>
parents:
41
diff
changeset
|
41 | settings->glsettings.gl_minor_version = 0; |
0 | 42 | settings->title = "Ascended Window"; |
43 | } | |
44 | ||
149
560772519ff9
resolve east-west conflict
Mike Becker <universe@uap-core.de>
parents:
121
diff
changeset
|
45 | void asc_window_initialize(unsigned int index, const AscWindowSettings *settings) { |
7 | 46 | if (index >= ASC_MAX_WINDOWS) { |
92 | 47 | asc_error("Maximum number of windows exceeded (%u/%u).", index, ASC_MAX_WINDOWS); |
65
9c44c55d327a
consistently refer to windows by ID - fixes #381
Mike Becker <universe@uap-core.de>
parents:
64
diff
changeset
|
48 | return; |
7 | 49 | } |
50 | AscWindow *window = &asc_context.windows[index]; | |
51 | if (window->id > 0) { | |
92 | 52 | asc_error("Cannot create window - slot %u already occupied.", index); |
65
9c44c55d327a
consistently refer to windows by ID - fixes #381
Mike Becker <universe@uap-core.de>
parents:
64
diff
changeset
|
53 | return; |
7 | 54 | } |
55 | ||
0 | 56 | Uint32 flags = SDL_WINDOW_OPENGL | SDL_WINDOW_SHOWN; |
57 | flags |= settings->fullscreen ? SDL_WINDOW_FULLSCREEN_DESKTOP : SDL_WINDOW_RESIZABLE; | |
58 | ||
59 | window->window = SDL_CreateWindow( | |
60 | settings->title, | |
61 | SDL_WINDOWPOS_CENTERED, | |
62 | SDL_WINDOWPOS_CENTERED, | |
3 | 63 | settings->dimensions.width, |
64 | settings->dimensions.height, | |
0 | 65 | flags |
66 | ); | |
67 | if (window->window == NULL) { | |
92 | 68 | asc_error("Creating Window failed: %s", SDL_GetError()); |
65
9c44c55d327a
consistently refer to windows by ID - fixes #381
Mike Becker <universe@uap-core.de>
parents:
64
diff
changeset
|
69 | return; |
0 | 70 | } |
71 | ||
72 | window->id = SDL_GetWindowID(window->window); | |
105 | 73 | { |
74 | Sint32 w, h; | |
75 | SDL_GetWindowSize(window->window, &w, &h); | |
76 | window->dimensions = asc_vec2u_new(w, h); | |
77 | } | |
37
8a8cc6725b48
add camera and render groups
Mike Becker <universe@uap-core.de>
parents:
34
diff
changeset
|
78 | window->resized = true; // count initial sizing as resize |
0 | 79 | |
154
4dff9cc488fe
add auto-scaling of UI depending on screen resolution - resolves #682
Mike Becker <universe@uap-core.de>
parents:
149
diff
changeset
|
80 | // default UI scale |
4dff9cc488fe
add auto-scaling of UI depending on screen resolution - resolves #682
Mike Becker <universe@uap-core.de>
parents:
149
diff
changeset
|
81 | window->ui_scale = 1.0f; |
4dff9cc488fe
add auto-scaling of UI depending on screen resolution - resolves #682
Mike Becker <universe@uap-core.de>
parents:
149
diff
changeset
|
82 | |
44
b3da4096c607
create own compilation unit for GL context - fixes shader not being created per context
Mike Becker <universe@uap-core.de>
parents:
41
diff
changeset
|
83 | if (asc_gl_context_initialize(&window->glctx, window->window, &settings->glsettings)) { |
121
ede9a9e92ff9
add viewport_clear flag to camera settings
Mike Becker <universe@uap-core.de>
parents:
112
diff
changeset
|
84 | asc_scene_init(&window->ui, |
100
5231da78831e
change asc_scene_init() to also request parameters for camera initialization
Mike Becker <universe@uap-core.de>
parents:
99
diff
changeset
|
85 | .type = ASC_CAMERA_ORTHO, |
105 | 86 | .ortho.rect = asc_recti_new(0, 0, window->dimensions.width, window->dimensions.height), |
101 | 87 | .projection_update_func = asc_camera_ortho_update_size |
121
ede9a9e92ff9
add viewport_clear flag to camera settings
Mike Becker <universe@uap-core.de>
parents:
112
diff
changeset
|
88 | ); |
96
9e25f080a33e
add scenes, but they don't draw yet
Mike Becker <universe@uap-core.de>
parents:
95
diff
changeset
|
89 | asc_dprintf("Window %u initialized at index %u", window->id, index); |
65
9c44c55d327a
consistently refer to windows by ID - fixes #381
Mike Becker <universe@uap-core.de>
parents:
64
diff
changeset
|
90 | asc_context.active_window = index; |
0 | 91 | } else { |
96
9e25f080a33e
add scenes, but they don't draw yet
Mike Becker <universe@uap-core.de>
parents:
95
diff
changeset
|
92 | asc_error("Creating GL context failed for window %u at index %u", window->id, index); |
44
b3da4096c607
create own compilation unit for GL context - fixes shader not being created per context
Mike Becker <universe@uap-core.de>
parents:
41
diff
changeset
|
93 | // cleanup on error |
b3da4096c607
create own compilation unit for GL context - fixes shader not being created per context
Mike Becker <universe@uap-core.de>
parents:
41
diff
changeset
|
94 | SDL_DestroyWindow(window->window); |
b3da4096c607
create own compilation unit for GL context - fixes shader not being created per context
Mike Becker <universe@uap-core.de>
parents:
41
diff
changeset
|
95 | window->window = NULL; |
b3da4096c607
create own compilation unit for GL context - fixes shader not being created per context
Mike Becker <universe@uap-core.de>
parents:
41
diff
changeset
|
96 | window->id = 0; |
0 | 97 | } |
98 | } | |
99 | ||
65
9c44c55d327a
consistently refer to windows by ID - fixes #381
Mike Becker <universe@uap-core.de>
parents:
64
diff
changeset
|
100 | void asc_window_destroy(unsigned int index) { |
7 | 101 | // safeguard |
65
9c44c55d327a
consistently refer to windows by ID - fixes #381
Mike Becker <universe@uap-core.de>
parents:
64
diff
changeset
|
102 | if (asc_context.windows[index].id == 0) return; |
7 | 103 | |
16
c5dde81b6fb2
add text rendering and demo FPS counter
Mike Becker <universe@uap-core.de>
parents:
13
diff
changeset
|
104 | // this window cannot be active anymore |
65
9c44c55d327a
consistently refer to windows by ID - fixes #381
Mike Becker <universe@uap-core.de>
parents:
64
diff
changeset
|
105 | if (asc_context.active_window == index) { |
9c44c55d327a
consistently refer to windows by ID - fixes #381
Mike Becker <universe@uap-core.de>
parents:
64
diff
changeset
|
106 | asc_context.active_window = ASC_MAX_WINDOWS; |
16
c5dde81b6fb2
add text rendering and demo FPS counter
Mike Becker <universe@uap-core.de>
parents:
13
diff
changeset
|
107 | } |
c5dde81b6fb2
add text rendering and demo FPS counter
Mike Becker <universe@uap-core.de>
parents:
13
diff
changeset
|
108 | |
65
9c44c55d327a
consistently refer to windows by ID - fixes #381
Mike Becker <universe@uap-core.de>
parents:
64
diff
changeset
|
109 | // pointer to the window |
9c44c55d327a
consistently refer to windows by ID - fixes #381
Mike Becker <universe@uap-core.de>
parents:
64
diff
changeset
|
110 | AscWindow *window = &asc_context.windows[index]; |
9c44c55d327a
consistently refer to windows by ID - fixes #381
Mike Becker <universe@uap-core.de>
parents:
64
diff
changeset
|
111 | |
9c44c55d327a
consistently refer to windows by ID - fixes #381
Mike Becker <universe@uap-core.de>
parents:
64
diff
changeset
|
112 | // for releasing OpenGL resources, we need to make the context current |
9c44c55d327a
consistently refer to windows by ID - fixes #381
Mike Becker <universe@uap-core.de>
parents:
64
diff
changeset
|
113 | asc_gl_context_activate(&window->glctx); |
9c44c55d327a
consistently refer to windows by ID - fixes #381
Mike Becker <universe@uap-core.de>
parents:
64
diff
changeset
|
114 | |
29
1d001eb694dc
bring first scene graph to live
Mike Becker <universe@uap-core.de>
parents:
16
diff
changeset
|
115 | // destroy all scenes |
96
9e25f080a33e
add scenes, but they don't draw yet
Mike Becker <universe@uap-core.de>
parents:
95
diff
changeset
|
116 | for (unsigned int i = 0; i < ASC_MAX_SCENES; i++) { |
9e25f080a33e
add scenes, but they don't draw yet
Mike Becker <universe@uap-core.de>
parents:
95
diff
changeset
|
117 | asc_scene_destroy(&window->scenes[i]); |
9e25f080a33e
add scenes, but they don't draw yet
Mike Becker <universe@uap-core.de>
parents:
95
diff
changeset
|
118 | } |
95
622887f7e954
in preparation of more scenes, bring back AscScene struct
Mike Becker <universe@uap-core.de>
parents:
92
diff
changeset
|
119 | asc_scene_destroy(&window->ui); |
29
1d001eb694dc
bring first scene graph to live
Mike Becker <universe@uap-core.de>
parents:
16
diff
changeset
|
120 | |
44
b3da4096c607
create own compilation unit for GL context - fixes shader not being created per context
Mike Becker <universe@uap-core.de>
parents:
41
diff
changeset
|
121 | // release context related data |
b3da4096c607
create own compilation unit for GL context - fixes shader not being created per context
Mike Becker <universe@uap-core.de>
parents:
41
diff
changeset
|
122 | asc_gl_context_destroy(&window->glctx); |
16
c5dde81b6fb2
add text rendering and demo FPS counter
Mike Becker <universe@uap-core.de>
parents:
13
diff
changeset
|
123 | |
44
b3da4096c607
create own compilation unit for GL context - fixes shader not being created per context
Mike Becker <universe@uap-core.de>
parents:
41
diff
changeset
|
124 | // destroy window |
0 | 125 | if (window->window != NULL) { |
126 | SDL_DestroyWindow(window->window); | |
127 | } | |
128 | ||
16
c5dde81b6fb2
add text rendering and demo FPS counter
Mike Becker <universe@uap-core.de>
parents:
13
diff
changeset
|
129 | // if another window was active, make the other context current again |
65
9c44c55d327a
consistently refer to windows by ID - fixes #381
Mike Becker <universe@uap-core.de>
parents:
64
diff
changeset
|
130 | if (asc_context.active_window < ASC_MAX_WINDOWS) { |
9c44c55d327a
consistently refer to windows by ID - fixes #381
Mike Becker <universe@uap-core.de>
parents:
64
diff
changeset
|
131 | asc_gl_context_activate(&asc_active_window->glctx); |
16
c5dde81b6fb2
add text rendering and demo FPS counter
Mike Becker <universe@uap-core.de>
parents:
13
diff
changeset
|
132 | } |
c5dde81b6fb2
add text rendering and demo FPS counter
Mike Becker <universe@uap-core.de>
parents:
13
diff
changeset
|
133 | |
0 | 134 | // clean the data |
135 | asc_dprintf("Window %u and its OpenGL context destroyed.", window->id); | |
136 | memset(window, 0, sizeof(AscWindow)); | |
137 | } | |
138 | ||
65
9c44c55d327a
consistently refer to windows by ID - fixes #381
Mike Becker <universe@uap-core.de>
parents:
64
diff
changeset
|
139 | void asc_window_sync(unsigned int index) { |
96
9e25f080a33e
add scenes, but they don't draw yet
Mike Becker <universe@uap-core.de>
parents:
95
diff
changeset
|
140 | if (index > ASC_MAX_WINDOWS) { |
9e25f080a33e
add scenes, but they don't draw yet
Mike Becker <universe@uap-core.de>
parents:
95
diff
changeset
|
141 | asc_error("Index for syncing window out of bounds (%u/%u).", index, ASC_MAX_WINDOWS); |
9e25f080a33e
add scenes, but they don't draw yet
Mike Becker <universe@uap-core.de>
parents:
95
diff
changeset
|
142 | return; |
9e25f080a33e
add scenes, but they don't draw yet
Mike Becker <universe@uap-core.de>
parents:
95
diff
changeset
|
143 | } |
9e25f080a33e
add scenes, but they don't draw yet
Mike Becker <universe@uap-core.de>
parents:
95
diff
changeset
|
144 | AscWindow *window = &asc_context.windows[index]; |
65
9c44c55d327a
consistently refer to windows by ID - fixes #381
Mike Becker <universe@uap-core.de>
parents:
64
diff
changeset
|
145 | // necessary safeguard |
96
9e25f080a33e
add scenes, but they don't draw yet
Mike Becker <universe@uap-core.de>
parents:
95
diff
changeset
|
146 | if (window->id == 0) return; |
65
9c44c55d327a
consistently refer to windows by ID - fixes #381
Mike Becker <universe@uap-core.de>
parents:
64
diff
changeset
|
147 | |
9c44c55d327a
consistently refer to windows by ID - fixes #381
Mike Becker <universe@uap-core.de>
parents:
64
diff
changeset
|
148 | // active the window that shall be synced temporarily |
9c44c55d327a
consistently refer to windows by ID - fixes #381
Mike Becker <universe@uap-core.de>
parents:
64
diff
changeset
|
149 | unsigned int active_index = asc_context.active_window; |
9c44c55d327a
consistently refer to windows by ID - fixes #381
Mike Becker <universe@uap-core.de>
parents:
64
diff
changeset
|
150 | if (index != active_index) { |
9c44c55d327a
consistently refer to windows by ID - fixes #381
Mike Becker <universe@uap-core.de>
parents:
64
diff
changeset
|
151 | asc_window_activate(index); |
16
c5dde81b6fb2
add text rendering and demo FPS counter
Mike Becker <universe@uap-core.de>
parents:
13
diff
changeset
|
152 | } |
29
1d001eb694dc
bring first scene graph to live
Mike Becker <universe@uap-core.de>
parents:
16
diff
changeset
|
153 | |
47
44457f6cb0a2
remove unnecessary scene container
Mike Becker <universe@uap-core.de>
parents:
44
diff
changeset
|
154 | // Clear the color buffer for the window frame |
96
9e25f080a33e
add scenes, but they don't draw yet
Mike Becker <universe@uap-core.de>
parents:
95
diff
changeset
|
155 | int window_width = window->dimensions.width; |
9e25f080a33e
add scenes, but they don't draw yet
Mike Becker <universe@uap-core.de>
parents:
95
diff
changeset
|
156 | int window_height = window->dimensions.height; |
47
44457f6cb0a2
remove unnecessary scene container
Mike Becker <universe@uap-core.de>
parents:
44
diff
changeset
|
157 | glViewport(0, 0, window_width, window_height); |
44457f6cb0a2
remove unnecessary scene container
Mike Becker <universe@uap-core.de>
parents:
44
diff
changeset
|
158 | glClear(GL_COLOR_BUFFER_BIT); |
44457f6cb0a2
remove unnecessary scene container
Mike Becker <universe@uap-core.de>
parents:
44
diff
changeset
|
159 | |
112
3e956c96dd6c
extract execution of behaviors from draw function
Mike Becker <universe@uap-core.de>
parents:
106
diff
changeset
|
160 | // Execute all behaviors |
3e956c96dd6c
extract execution of behaviors from draw function
Mike Becker <universe@uap-core.de>
parents:
106
diff
changeset
|
161 | // TODO: this can eventually be parallelized |
3e956c96dd6c
extract execution of behaviors from draw function
Mike Becker <universe@uap-core.de>
parents:
106
diff
changeset
|
162 | for (unsigned int i = 0; i < ASC_MAX_SCENES; i++) { |
3e956c96dd6c
extract execution of behaviors from draw function
Mike Becker <universe@uap-core.de>
parents:
106
diff
changeset
|
163 | asc_scene_execute_behaviors(&window->scenes[i]); |
3e956c96dd6c
extract execution of behaviors from draw function
Mike Becker <universe@uap-core.de>
parents:
106
diff
changeset
|
164 | } |
3e956c96dd6c
extract execution of behaviors from draw function
Mike Becker <universe@uap-core.de>
parents:
106
diff
changeset
|
165 | asc_scene_execute_behaviors(&window->ui); |
3e956c96dd6c
extract execution of behaviors from draw function
Mike Becker <universe@uap-core.de>
parents:
106
diff
changeset
|
166 | |
96
9e25f080a33e
add scenes, but they don't draw yet
Mike Becker <universe@uap-core.de>
parents:
95
diff
changeset
|
167 | // Draw all scenes |
9e25f080a33e
add scenes, but they don't draw yet
Mike Becker <universe@uap-core.de>
parents:
95
diff
changeset
|
168 | for (unsigned int i = 0; i < ASC_MAX_SCENES; i++) { |
99
ac143db979dc
add aspect-ration independent rendering
Mike Becker <universe@uap-core.de>
parents:
96
diff
changeset
|
169 | asc_scene_draw(&window->scenes[i]); |
96
9e25f080a33e
add scenes, but they don't draw yet
Mike Becker <universe@uap-core.de>
parents:
95
diff
changeset
|
170 | } |
99
ac143db979dc
add aspect-ration independent rendering
Mike Becker <universe@uap-core.de>
parents:
96
diff
changeset
|
171 | asc_scene_draw(&window->ui); |
29
1d001eb694dc
bring first scene graph to live
Mike Becker <universe@uap-core.de>
parents:
16
diff
changeset
|
172 | |
1d001eb694dc
bring first scene graph to live
Mike Becker <universe@uap-core.de>
parents:
16
diff
changeset
|
173 | // Swap Buffers |
96
9e25f080a33e
add scenes, but they don't draw yet
Mike Becker <universe@uap-core.de>
parents:
95
diff
changeset
|
174 | SDL_GL_SwapWindow(window->window); |
29
1d001eb694dc
bring first scene graph to live
Mike Becker <universe@uap-core.de>
parents:
16
diff
changeset
|
175 | |
37
8a8cc6725b48
add camera and render groups
Mike Becker <universe@uap-core.de>
parents:
34
diff
changeset
|
176 | // Clear Flags |
96
9e25f080a33e
add scenes, but they don't draw yet
Mike Becker <universe@uap-core.de>
parents:
95
diff
changeset
|
177 | window->resized = false; |
37
8a8cc6725b48
add camera and render groups
Mike Becker <universe@uap-core.de>
parents:
34
diff
changeset
|
178 | |
65
9c44c55d327a
consistently refer to windows by ID - fixes #381
Mike Becker <universe@uap-core.de>
parents:
64
diff
changeset
|
179 | if (index != active_index) { |
9c44c55d327a
consistently refer to windows by ID - fixes #381
Mike Becker <universe@uap-core.de>
parents:
64
diff
changeset
|
180 | asc_window_activate(active_index); |
16
c5dde81b6fb2
add text rendering and demo FPS counter
Mike Becker <universe@uap-core.de>
parents:
13
diff
changeset
|
181 | } |
0 | 182 | } |
16
c5dde81b6fb2
add text rendering and demo FPS counter
Mike Becker <universe@uap-core.de>
parents:
13
diff
changeset
|
183 | |
65
9c44c55d327a
consistently refer to windows by ID - fixes #381
Mike Becker <universe@uap-core.de>
parents:
64
diff
changeset
|
184 | void asc_window_activate(unsigned int index) { |
9c44c55d327a
consistently refer to windows by ID - fixes #381
Mike Becker <universe@uap-core.de>
parents:
64
diff
changeset
|
185 | asc_context.active_window = index; |
9c44c55d327a
consistently refer to windows by ID - fixes #381
Mike Becker <universe@uap-core.de>
parents:
64
diff
changeset
|
186 | asc_gl_context_activate(&asc_active_window->glctx); |
16
c5dde81b6fb2
add text rendering and demo FPS counter
Mike Becker <universe@uap-core.de>
parents:
13
diff
changeset
|
187 | } |
68
823c03733e42
add mouse and window focus - resolves #382
Mike Becker <universe@uap-core.de>
parents:
65
diff
changeset
|
188 | |
823c03733e42
add mouse and window focus - resolves #382
Mike Becker <universe@uap-core.de>
parents:
65
diff
changeset
|
189 | unsigned int asc_window_index(Uint32 id) { |
823c03733e42
add mouse and window focus - resolves #382
Mike Becker <universe@uap-core.de>
parents:
65
diff
changeset
|
190 | unsigned int i = 0; |
823c03733e42
add mouse and window focus - resolves #382
Mike Becker <universe@uap-core.de>
parents:
65
diff
changeset
|
191 | for (; i < ASC_MAX_WINDOWS ; i++) { |
823c03733e42
add mouse and window focus - resolves #382
Mike Becker <universe@uap-core.de>
parents:
65
diff
changeset
|
192 | if (asc_context.windows[i].id == id) break; |
823c03733e42
add mouse and window focus - resolves #382
Mike Becker <universe@uap-core.de>
parents:
65
diff
changeset
|
193 | } |
823c03733e42
add mouse and window focus - resolves #382
Mike Becker <universe@uap-core.de>
parents:
65
diff
changeset
|
194 | return i; |
823c03733e42
add mouse and window focus - resolves #382
Mike Becker <universe@uap-core.de>
parents:
65
diff
changeset
|
195 | } |
95
622887f7e954
in preparation of more scenes, bring back AscScene struct
Mike Becker <universe@uap-core.de>
parents:
92
diff
changeset
|
196 | |
96
9e25f080a33e
add scenes, but they don't draw yet
Mike Becker <universe@uap-core.de>
parents:
95
diff
changeset
|
197 | AscScene *asc_window_scene(unsigned int index) { |
9e25f080a33e
add scenes, but they don't draw yet
Mike Becker <universe@uap-core.de>
parents:
95
diff
changeset
|
198 | return &asc_active_window->scenes[index]; |
9e25f080a33e
add scenes, but they don't draw yet
Mike Becker <universe@uap-core.de>
parents:
95
diff
changeset
|
199 | } |
154
4dff9cc488fe
add auto-scaling of UI depending on screen resolution - resolves #682
Mike Becker <universe@uap-core.de>
parents:
149
diff
changeset
|
200 | |
4dff9cc488fe
add auto-scaling of UI depending on screen resolution - resolves #682
Mike Becker <universe@uap-core.de>
parents:
149
diff
changeset
|
201 | asc_vec2u asc_window_display_resolution(void) { |
4dff9cc488fe
add auto-scaling of UI depending on screen resolution - resolves #682
Mike Becker <universe@uap-core.de>
parents:
149
diff
changeset
|
202 | const AscWindow *window = asc_active_window; |
4dff9cc488fe
add auto-scaling of UI depending on screen resolution - resolves #682
Mike Becker <universe@uap-core.de>
parents:
149
diff
changeset
|
203 | SDL_DisplayMode dm; |
4dff9cc488fe
add auto-scaling of UI depending on screen resolution - resolves #682
Mike Becker <universe@uap-core.de>
parents:
149
diff
changeset
|
204 | const int display = SDL_GetWindowDisplayIndex(window->window); |
4dff9cc488fe
add auto-scaling of UI depending on screen resolution - resolves #682
Mike Becker <universe@uap-core.de>
parents:
149
diff
changeset
|
205 | if (SDL_GetDesktopDisplayMode(display, &dm)) { |
4dff9cc488fe
add auto-scaling of UI depending on screen resolution - resolves #682
Mike Becker <universe@uap-core.de>
parents:
149
diff
changeset
|
206 | asc_error("Failed to get display mode for window %u on display %d: %s", |
4dff9cc488fe
add auto-scaling of UI depending on screen resolution - resolves #682
Mike Becker <universe@uap-core.de>
parents:
149
diff
changeset
|
207 | window->id, display, SDL_GetError()); |
4dff9cc488fe
add auto-scaling of UI depending on screen resolution - resolves #682
Mike Becker <universe@uap-core.de>
parents:
149
diff
changeset
|
208 | } |
4dff9cc488fe
add auto-scaling of UI depending on screen resolution - resolves #682
Mike Becker <universe@uap-core.de>
parents:
149
diff
changeset
|
209 | return asc_vec2u_new(dm.w, dm.h); |
4dff9cc488fe
add auto-scaling of UI depending on screen resolution - resolves #682
Mike Becker <universe@uap-core.de>
parents:
149
diff
changeset
|
210 | } |