Files
wxWidgets/src/osx/sound_osx.cpp
Tobias Taschner 5ba67c67e4 Remove wxOSX/Carbon support.
Cocoa has been the default toolkit in wxWidgets for a long time. There is really no good reason to use Carbon in 2016 and this removes a lot of unused and unmaintained code.
2016-02-01 13:48:48 +01:00

135 lines
2.6 KiB
C++

/////////////////////////////////////////////////////////////////////////////
// Name: src/osx/sound_osx.cpp
// Purpose: wxSound class common osx code
// Author: Stefan Csomor
// Modified by:
// Created: 2009-09-01
// Copyright: (c) Stefan Csomor
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
// For compilers that support precompilation, includes "wx.h".
#include "wx/wxprec.h"
#if wxUSE_SOUND
#include "wx/sound.h"
#ifndef WX_PRECOMP
#include "wx/object.h"
#include "wx/string.h"
#include "wx/intl.h"
#include "wx/log.h"
#endif
#include "wx/file.h"
#include "wx/vector.h"
wxVector<wxSoundData*> s_soundsPlaying;
wxSoundData::wxSoundData()
{
m_markedForDeletion = false;
}
wxSoundData::~wxSoundData()
{
}
void wxSoundData::MarkForDeletion()
{
m_markedForDeletion = true;
}
void wxSoundData::Stop()
{
DoStop();
}
wxSound::wxSound()
{
Init();
}
wxSound::wxSound(const wxString& sFileName, bool isResource)
{
Init();
Create(sFileName, isResource);
}
wxSound::wxSound(size_t size, const void* data)
{
Init();
Create( size, data );
}
wxSound::~wxSound()
{
// if the sound is in a playing state, just mark it to be deleted and
// delete it after it plays. Otherwise, async sounds created on the stack
// may never get the chance to play.
bool isPlaying = false;
for ( wxVector<wxSoundData*>::reverse_iterator s = s_soundsPlaying.rbegin();
s != s_soundsPlaying.rend(); ++s )
{
if (*s == m_data)
{
isPlaying = true;
break;
}
}
if (isPlaying)
m_data->MarkForDeletion();
else
delete m_data;
}
void wxSound::Init()
{
m_data = NULL;
}
bool wxSound::DoPlay(unsigned flags) const
{
if ( m_data )
{
s_soundsPlaying.push_back(m_data);
if ( !m_data->Play(flags) )
s_soundsPlaying.pop_back();
}
return false;
}
bool wxSound::IsPlaying()
{
return s_soundsPlaying.size() > 0;
}
void wxSound::Stop()
{
for ( wxVector<wxSoundData*>::reverse_iterator s = s_soundsPlaying.rbegin();
s != s_soundsPlaying.rend(); ++s )
{
(*s)->Stop();
}
}
// Notification when a sound has stopped
void wxSound::SoundStopped(const wxSoundData* data)
{
for ( wxVector<wxSoundData*>::iterator s = s_soundsPlaying.begin();
s != s_soundsPlaying.end(); ++s )
{
if ( (*s) == data )
{
s_soundsPlaying.erase(s);
break;
}
}
}
#endif //wxUSE_SOUND