/*
* call-seq:
* rewind -> self
*
* Rewind the Music to the beginning. If the Music was paused, it
* will still be paused after the rewind. Does nothing if the Music
* is stopped.
*/
static VALUE rg_music_rewind( VALUE self )
{
RG_Music *music;
Data_Get_Struct(self, RG_Music, music);
/* Check that the music is current. */
if( _rg_music_current_check(self) )
{
/* Only do anything if it's not stopped */
if( !rg_music_stoppedp(self) )
{
/* Remember whether it was paused. */
int was_paused = Mix_PausedMusic();
/*
* Rather than using SDL_mixer's crippled Mix_RewindMusic,
* which only works for a few file types, we'll just stop and
* start the music again from the beginning.
*/
Mix_HaltMusic();
int result = Mix_PlayMusic(music->wrap->music, music->repeats);
if( result == -1 )
{
rb_raise(eSDLError, "Could not rewind Music: %s", Mix_GetError());
}
/* Pause it again if it was paused before. */
if( was_paused )
{
Mix_PauseMusic();
}
}
}
return self;
}