Browse Source

Fixed SDL minimizing. Do not pause SDL audio as it may be bugged, instead mix silence into the audio stream.

Lasse Öörni 13 years ago
parent
commit
4b12319ee0
2 changed files with 29 additions and 20 deletions
  1. 1 3
      Engine/Audio/Audio.cpp
  2. 28 17
      Engine/Input/Input.cpp

+ 1 - 3
Engine/Audio/Audio.cpp

@@ -405,9 +405,7 @@ void Audio::Stop()
     if (!playing_)
         return;
     
-    #ifdef USE_OPENGL
-    SDL_PauseAudioDevice(stream_, 1);
-    #else
+    #ifndef USE_OPENGL
     if (stream_)
         ((AudioStream*)stream_)->StopPlayback();
     #endif

+ 28 - 17
Engine/Input/Input.cpp

@@ -841,28 +841,36 @@ void Input::HandleSDLEvent(void* sdlEvent)
         break;
         
     case SDL_WINDOWEVENT:
-        if (evt.window.event == SDL_WINDOWEVENT_CLOSE)
+        input = GetInputInstance(evt.window.windowID);
+        if (input)
         {
-            input = GetInputInstance(evt.window.windowID);
-            if (input)
+            switch (evt.window.event)
+            {
+            case SDL_WINDOWEVENT_CLOSE:
                 input->GetSubsystem<Graphics>()->Close();
-        }
-        #ifdef ANDROID
-        if (evt.window.event == SDL_WINDOWEVENT_SURFACE_LOST)
-        {
-            input = GetInputInstance(evt.window.windowID);
-            // Mark GPU objects lost
-            if (input)
+                break;
+                
+            case SDL_WINDOWEVENT_MINIMIZED:
+                input->minimized_ = true;
+                break;
+                
+            case SDL_WINDOWEVENT_RESTORED:
+                input->minimized_ = false;
+                break;
+                
+            #ifdef ANDROID
+            case SDL_WINDOWEVENT_SURFACE_LOST:
+                // Mark GPU objects lost
                 input->graphics_->Release(false, false);
-        }
-        if (evt.window.event == SDL_WINDOWEVENT_SURFACE_CREATED)
-        {
-            input = GetInputInstance(evt.window.windowID);
-            // Restore GPU objects
-            if (input)
+                break;
+                
+            case SDL_WINDOWEVENT_SURFACE_CREATED:
+                // Restore GPU objects
                 input->graphics_->Restore();
+                break;
+            #endif
+            }
         }
-        #endif
         break;
     }
 }
@@ -895,6 +903,9 @@ void Input::HandleScreenMode(StringHash eventType, VariantMap& eventData)
     #else
     SetClipCursor(true);
     #endif
+    
+    // After setting new screen mode we never should be minimized
+    minimized_ = false;
 }
 
 void Input::HandleBeginFrame(StringHash eventType, VariantMap& eventData)