mirror of
https://github.com/love2d/love.git
synced 2026-08-16 08:11:02 +02:00
Fix automatically pausing and resuming audio on android (resolves #1237)
--HG-- branch : minor
This commit is contained in:
@@ -164,7 +164,7 @@ void Event::exceptionIfInRenderPass()
|
||||
throw love::Exception("Cannot call this function while a render pass is active in love.graphics.");
|
||||
}
|
||||
|
||||
Message *Event::convert(const SDL_Event &e) const
|
||||
Message *Event::convert(const SDL_Event &e)
|
||||
{
|
||||
Message *msg = nullptr;
|
||||
|
||||
@@ -528,7 +528,7 @@ Message *Event::convertJoystickEvent(const SDL_Event &e) const
|
||||
return msg;
|
||||
}
|
||||
|
||||
Message *Event::convertWindowEvent(const SDL_Event &e) const
|
||||
Message *Event::convertWindowEvent(const SDL_Event &e)
|
||||
{
|
||||
Message *msg = nullptr;
|
||||
|
||||
@@ -581,16 +581,24 @@ Message *Event::convertWindowEvent(const SDL_Event &e) const
|
||||
case SDL_WINDOWEVENT_MINIMIZED:
|
||||
case SDL_WINDOWEVENT_RESTORED:
|
||||
#ifdef LOVE_ANDROID
|
||||
{
|
||||
auto audio = Module::getInstance<audio::Audio>(Module::M_AUDIO);
|
||||
if (audio)
|
||||
if (auto audio = Module::getInstance<audio::Audio>(Module::M_AUDIO))
|
||||
{
|
||||
if (e.window.event == SDL_WINDOWEVENT_MINIMIZED)
|
||||
audio->pause();
|
||||
{
|
||||
for (auto &src : pausedSources)
|
||||
src->release();
|
||||
pausedSources = audio->pause();
|
||||
for (auto &src : pausedSources)
|
||||
src->retain();
|
||||
}
|
||||
else if (e.window.event == SDL_WINDOWEVENT_RESTORED)
|
||||
audio->resume();
|
||||
{
|
||||
audio->play(pausedSources);
|
||||
for (auto &src : pausedSources)
|
||||
src->release();
|
||||
pausedSources.resize(0);
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
|
||||
// LOVE
|
||||
#include "event/Event.h"
|
||||
#include "audio/Source.h"
|
||||
|
||||
// SDL
|
||||
#include <SDL_events.h>
|
||||
@@ -70,13 +71,17 @@ private:
|
||||
|
||||
void exceptionIfInRenderPass();
|
||||
|
||||
Message *convert(const SDL_Event &e) const;
|
||||
Message *convert(const SDL_Event &e);
|
||||
Message *convertJoystickEvent(const SDL_Event &e) const;
|
||||
Message *convertWindowEvent(const SDL_Event &e) const;
|
||||
Message *convertWindowEvent(const SDL_Event &e);
|
||||
|
||||
static std::map<SDL_Keycode, love::keyboard::Keyboard::Key> createKeyMap();
|
||||
static std::map<SDL_Keycode, love::keyboard::Keyboard::Key> keys;
|
||||
|
||||
#ifdef LOVE_ANDROID
|
||||
std::vector<love::audio::Source*> pausedSources;
|
||||
#endif
|
||||
|
||||
}; // Event
|
||||
|
||||
} // sdl
|
||||
|
||||
Reference in New Issue
Block a user