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 }