Mercurial > hg > orthanc-stone
comparison Applications/Sdl/SdlEngine.cpp @ 271:46c5296d867e am-2
OracleWebService and BasicSdlApplicationContext using the same global mutex
author | am@osimis.io |
---|---|
date | Thu, 23 Aug 2018 17:12:54 +0200 |
parents | 84844649a8fd |
children | dc1beee33134 |
comparison
equal
deleted
inserted
replaced
270:2d64f4d39610 | 271:46c5296d867e |
---|---|
27 | 27 |
28 #include <SDL.h> | 28 #include <SDL.h> |
29 | 29 |
30 namespace OrthancStone | 30 namespace OrthancStone |
31 { | 31 { |
32 void SdlEngine::SetSize(BasicSdlApplicationContext::ViewportLocker& locker, | 32 void SdlEngine::SetSize(unsigned int width, |
33 unsigned int width, | |
34 unsigned int height) | 33 unsigned int height) |
35 { | 34 { |
36 locker.GetViewport().SetSize(width, height); | 35 context_.GetCentralViewport().SetSize(width, height); |
37 surface_.SetSize(width, height); | 36 surface_.SetSize(width, height); |
38 } | 37 } |
39 | 38 |
40 | 39 |
41 void SdlEngine::RenderFrame() | 40 void SdlEngine::RenderFrame() |
42 { | 41 { |
43 if (viewportChanged_) | 42 if (viewportChanged_) |
44 { | 43 { |
45 BasicSdlApplicationContext::ViewportLocker locker(context_); | 44 BasicSdlApplicationContext::GlobalMutexLocker locker(context_); |
46 surface_.Render(locker.GetViewport()); | 45 surface_.Render(context_.GetCentralViewport()); |
47 | 46 |
48 viewportChanged_ = false; | 47 viewportChanged_ = false; |
49 } | 48 } |
50 } | 49 } |
51 | 50 |
117 { | 116 { |
118 int scancodeCount = 0; | 117 int scancodeCount = 0; |
119 const uint8_t* keyboardState = SDL_GetKeyboardState(&scancodeCount); | 118 const uint8_t* keyboardState = SDL_GetKeyboardState(&scancodeCount); |
120 | 119 |
121 { | 120 { |
122 BasicSdlApplicationContext::ViewportLocker locker(context_); | 121 BasicSdlApplicationContext::GlobalMutexLocker locker(context_); |
123 SetSize(locker, window_.GetWidth(), window_.GetHeight()); | 122 SetSize(window_.GetWidth(), window_.GetHeight()); |
124 locker.GetViewport().SetDefaultView(); | 123 context_.GetCentralViewport().SetDefaultView(); |
125 } | 124 } |
126 | 125 |
127 bool stop = false; | 126 bool stop = false; |
128 while (!stop) | 127 while (!stop) |
129 { | 128 { |
132 SDL_Event event; | 131 SDL_Event event; |
133 | 132 |
134 while (!stop && | 133 while (!stop && |
135 SDL_PollEvent(&event)) | 134 SDL_PollEvent(&event)) |
136 { | 135 { |
137 BasicSdlApplicationContext::ViewportLocker locker(context_); | 136 BasicSdlApplicationContext::GlobalMutexLocker locker(context_); |
138 | 137 |
139 if (event.type == SDL_QUIT) | 138 if (event.type == SDL_QUIT) |
140 { | 139 { |
141 stop = true; | 140 stop = true; |
142 break; | 141 break; |
146 KeyboardModifiers modifiers = GetKeyboardModifiers(keyboardState, scancodeCount); | 145 KeyboardModifiers modifiers = GetKeyboardModifiers(keyboardState, scancodeCount); |
147 | 146 |
148 switch (event.button.button) | 147 switch (event.button.button) |
149 { | 148 { |
150 case SDL_BUTTON_LEFT: | 149 case SDL_BUTTON_LEFT: |
151 locker.GetViewport().MouseDown(MouseButton_Left, event.button.x, event.button.y, modifiers); | 150 context_.GetCentralViewport().MouseDown(MouseButton_Left, event.button.x, event.button.y, modifiers); |
152 break; | 151 break; |
153 | 152 |
154 case SDL_BUTTON_RIGHT: | 153 case SDL_BUTTON_RIGHT: |
155 locker.GetViewport().MouseDown(MouseButton_Right, event.button.x, event.button.y, modifiers); | 154 context_.GetCentralViewport().MouseDown(MouseButton_Right, event.button.x, event.button.y, modifiers); |
156 break; | 155 break; |
157 | 156 |
158 case SDL_BUTTON_MIDDLE: | 157 case SDL_BUTTON_MIDDLE: |
159 locker.GetViewport().MouseDown(MouseButton_Middle, event.button.x, event.button.y, modifiers); | 158 context_.GetCentralViewport().MouseDown(MouseButton_Middle, event.button.x, event.button.y, modifiers); |
160 break; | 159 break; |
161 | 160 |
162 default: | 161 default: |
163 break; | 162 break; |
164 } | 163 } |
165 } | 164 } |
166 else if (event.type == SDL_MOUSEMOTION) | 165 else if (event.type == SDL_MOUSEMOTION) |
167 { | 166 { |
168 locker.GetViewport().MouseMove(event.button.x, event.button.y); | 167 context_.GetCentralViewport().MouseMove(event.button.x, event.button.y); |
169 } | 168 } |
170 else if (event.type == SDL_MOUSEBUTTONUP) | 169 else if (event.type == SDL_MOUSEBUTTONUP) |
171 { | 170 { |
172 locker.GetViewport().MouseUp(); | 171 context_.GetCentralViewport().MouseUp(); |
173 } | 172 } |
174 else if (event.type == SDL_WINDOWEVENT) | 173 else if (event.type == SDL_WINDOWEVENT) |
175 { | 174 { |
176 switch (event.window.event) | 175 switch (event.window.event) |
177 { | 176 { |
178 case SDL_WINDOWEVENT_LEAVE: | 177 case SDL_WINDOWEVENT_LEAVE: |
179 locker.GetViewport().MouseLeave(); | 178 context_.GetCentralViewport().MouseLeave(); |
180 break; | 179 break; |
181 | 180 |
182 case SDL_WINDOWEVENT_ENTER: | 181 case SDL_WINDOWEVENT_ENTER: |
183 locker.GetViewport().MouseEnter(); | 182 context_.GetCentralViewport().MouseEnter(); |
184 break; | 183 break; |
185 | 184 |
186 case SDL_WINDOWEVENT_SIZE_CHANGED: | 185 case SDL_WINDOWEVENT_SIZE_CHANGED: |
187 SetSize(locker, event.window.data1, event.window.data2); | 186 SetSize(event.window.data1, event.window.data2); |
188 break; | 187 break; |
189 | 188 |
190 default: | 189 default: |
191 break; | 190 break; |
192 } | 191 } |
198 int x, y; | 197 int x, y; |
199 SDL_GetMouseState(&x, &y); | 198 SDL_GetMouseState(&x, &y); |
200 | 199 |
201 if (event.wheel.y > 0) | 200 if (event.wheel.y > 0) |
202 { | 201 { |
203 locker.GetViewport().MouseWheel(MouseWheelDirection_Up, x, y, modifiers); | 202 context_.GetCentralViewport().MouseWheel(MouseWheelDirection_Up, x, y, modifiers); |
204 } | 203 } |
205 else if (event.wheel.y < 0) | 204 else if (event.wheel.y < 0) |
206 { | 205 { |
207 locker.GetViewport().MouseWheel(MouseWheelDirection_Down, x, y, modifiers); | 206 context_.GetCentralViewport().MouseWheel(MouseWheelDirection_Down, x, y, modifiers); |
208 } | 207 } |
209 } | 208 } |
210 else if (event.type == SDL_KEYDOWN && | 209 else if (event.type == SDL_KEYDOWN && |
211 event.key.repeat == 0 /* Ignore key bounce */) | 210 event.key.repeat == 0 /* Ignore key bounce */) |
212 { | 211 { |
213 KeyboardModifiers modifiers = GetKeyboardModifiers(keyboardState, scancodeCount); | 212 KeyboardModifiers modifiers = GetKeyboardModifiers(keyboardState, scancodeCount); |
214 | 213 |
215 switch (event.key.keysym.sym) | 214 switch (event.key.keysym.sym) |
216 { | 215 { |
217 case SDLK_a: locker.GetViewport().KeyPressed('a', modifiers); break; | 216 case SDLK_a: context_.GetCentralViewport().KeyPressed('a', modifiers); break; |
218 case SDLK_b: locker.GetViewport().KeyPressed('b', modifiers); break; | 217 case SDLK_b: context_.GetCentralViewport().KeyPressed('b', modifiers); break; |
219 case SDLK_c: locker.GetViewport().KeyPressed('c', modifiers); break; | 218 case SDLK_c: context_.GetCentralViewport().KeyPressed('c', modifiers); break; |
220 case SDLK_d: locker.GetViewport().KeyPressed('d', modifiers); break; | 219 case SDLK_d: context_.GetCentralViewport().KeyPressed('d', modifiers); break; |
221 case SDLK_e: locker.GetViewport().KeyPressed('e', modifiers); break; | 220 case SDLK_e: context_.GetCentralViewport().KeyPressed('e', modifiers); break; |
222 case SDLK_f: window_.ToggleMaximize(); break; | 221 case SDLK_f: window_.ToggleMaximize(); break; |
223 case SDLK_g: locker.GetViewport().KeyPressed('g', modifiers); break; | 222 case SDLK_g: context_.GetCentralViewport().KeyPressed('g', modifiers); break; |
224 case SDLK_h: locker.GetViewport().KeyPressed('h', modifiers); break; | 223 case SDLK_h: context_.GetCentralViewport().KeyPressed('h', modifiers); break; |
225 case SDLK_i: locker.GetViewport().KeyPressed('i', modifiers); break; | 224 case SDLK_i: context_.GetCentralViewport().KeyPressed('i', modifiers); break; |
226 case SDLK_j: locker.GetViewport().KeyPressed('j', modifiers); break; | 225 case SDLK_j: context_.GetCentralViewport().KeyPressed('j', modifiers); break; |
227 case SDLK_k: locker.GetViewport().KeyPressed('k', modifiers); break; | 226 case SDLK_k: context_.GetCentralViewport().KeyPressed('k', modifiers); break; |
228 case SDLK_l: locker.GetViewport().KeyPressed('l', modifiers); break; | 227 case SDLK_l: context_.GetCentralViewport().KeyPressed('l', modifiers); break; |
229 case SDLK_m: locker.GetViewport().KeyPressed('m', modifiers); break; | 228 case SDLK_m: context_.GetCentralViewport().KeyPressed('m', modifiers); break; |
230 case SDLK_n: locker.GetViewport().KeyPressed('n', modifiers); break; | 229 case SDLK_n: context_.GetCentralViewport().KeyPressed('n', modifiers); break; |
231 case SDLK_o: locker.GetViewport().KeyPressed('o', modifiers); break; | 230 case SDLK_o: context_.GetCentralViewport().KeyPressed('o', modifiers); break; |
232 case SDLK_p: locker.GetViewport().KeyPressed('p', modifiers); break; | 231 case SDLK_p: context_.GetCentralViewport().KeyPressed('p', modifiers); break; |
233 case SDLK_q: stop = true; break; | 232 case SDLK_q: stop = true; break; |
234 case SDLK_r: locker.GetViewport().KeyPressed('r', modifiers); break; | 233 case SDLK_r: context_.GetCentralViewport().KeyPressed('r', modifiers); break; |
235 case SDLK_s: locker.GetViewport().KeyPressed('s', modifiers); break; | 234 case SDLK_s: context_.GetCentralViewport().KeyPressed('s', modifiers); break; |
236 case SDLK_t: locker.GetViewport().KeyPressed('t', modifiers); break; | 235 case SDLK_t: context_.GetCentralViewport().KeyPressed('t', modifiers); break; |
237 case SDLK_u: locker.GetViewport().KeyPressed('u', modifiers); break; | 236 case SDLK_u: context_.GetCentralViewport().KeyPressed('u', modifiers); break; |
238 case SDLK_v: locker.GetViewport().KeyPressed('v', modifiers); break; | 237 case SDLK_v: context_.GetCentralViewport().KeyPressed('v', modifiers); break; |
239 case SDLK_w: locker.GetViewport().KeyPressed('w', modifiers); break; | 238 case SDLK_w: context_.GetCentralViewport().KeyPressed('w', modifiers); break; |
240 case SDLK_x: locker.GetViewport().KeyPressed('x', modifiers); break; | 239 case SDLK_x: context_.GetCentralViewport().KeyPressed('x', modifiers); break; |
241 case SDLK_y: locker.GetViewport().KeyPressed('y', modifiers); break; | 240 case SDLK_y: context_.GetCentralViewport().KeyPressed('y', modifiers); break; |
242 case SDLK_z: locker.GetViewport().KeyPressed('z', modifiers); break; | 241 case SDLK_z: context_.GetCentralViewport().KeyPressed('z', modifiers); break; |
243 case SDLK_KP_0: locker.GetViewport().KeyPressed('0', modifiers); break; | 242 case SDLK_KP_0: context_.GetCentralViewport().KeyPressed('0', modifiers); break; |
244 case SDLK_KP_1: locker.GetViewport().KeyPressed('1', modifiers); break; | 243 case SDLK_KP_1: context_.GetCentralViewport().KeyPressed('1', modifiers); break; |
245 case SDLK_KP_2: locker.GetViewport().KeyPressed('2', modifiers); break; | 244 case SDLK_KP_2: context_.GetCentralViewport().KeyPressed('2', modifiers); break; |
246 case SDLK_KP_3: locker.GetViewport().KeyPressed('3', modifiers); break; | 245 case SDLK_KP_3: context_.GetCentralViewport().KeyPressed('3', modifiers); break; |
247 case SDLK_KP_4: locker.GetViewport().KeyPressed('4', modifiers); break; | 246 case SDLK_KP_4: context_.GetCentralViewport().KeyPressed('4', modifiers); break; |
248 case SDLK_KP_5: locker.GetViewport().KeyPressed('5', modifiers); break; | 247 case SDLK_KP_5: context_.GetCentralViewport().KeyPressed('5', modifiers); break; |
249 case SDLK_KP_6: locker.GetViewport().KeyPressed('6', modifiers); break; | 248 case SDLK_KP_6: context_.GetCentralViewport().KeyPressed('6', modifiers); break; |
250 case SDLK_KP_7: locker.GetViewport().KeyPressed('7', modifiers); break; | 249 case SDLK_KP_7: context_.GetCentralViewport().KeyPressed('7', modifiers); break; |
251 case SDLK_KP_8: locker.GetViewport().KeyPressed('8', modifiers); break; | 250 case SDLK_KP_8: context_.GetCentralViewport().KeyPressed('8', modifiers); break; |
252 case SDLK_KP_9: locker.GetViewport().KeyPressed('9', modifiers); break; | 251 case SDLK_KP_9: context_.GetCentralViewport().KeyPressed('9', modifiers); break; |
253 | 252 |
254 case SDLK_PLUS: | 253 case SDLK_PLUS: |
255 case SDLK_KP_PLUS: | 254 case SDLK_KP_PLUS: |
256 locker.GetViewport().KeyPressed('+', modifiers); break; | 255 context_.GetCentralViewport().KeyPressed('+', modifiers); break; |
257 | 256 |
258 case SDLK_MINUS: | 257 case SDLK_MINUS: |
259 case SDLK_KP_MINUS: | 258 case SDLK_KP_MINUS: |
260 locker.GetViewport().KeyPressed('-', modifiers); break; | 259 context_.GetCentralViewport().KeyPressed('-', modifiers); break; |
261 | 260 |
262 default: | 261 default: |
263 break; | 262 break; |
264 } | 263 } |
265 } | 264 } |