From 0ed542206a34c3710d6e2c6e89e6512f285a96b8 Mon Sep 17 00:00:00 2001 From: Jordan Woyak Date: Fri, 1 Apr 2011 23:57:06 +0000 Subject: [PATCH] Fix SDL 1.3 support. git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@7434 8ced0084-cf51-0410-be5f-012b33b47a6e --- .../Src/ControllerInterface/SDL/SDL.cpp | 58 ++++++++++--------- .../Src/ControllerInterface/SDL/SDL.h | 18 +++--- 2 files changed, 41 insertions(+), 35 deletions(-) diff --git a/Source/Core/InputCommon/Src/ControllerInterface/SDL/SDL.cpp b/Source/Core/InputCommon/Src/ControllerInterface/SDL/SDL.cpp index b6bdb27b02..429fe8cb78 100644 --- a/Source/Core/InputCommon/Src/ControllerInterface/SDL/SDL.cpp +++ b/Source/Core/InputCommon/Src/ControllerInterface/SDL/SDL.cpp @@ -93,7 +93,7 @@ Joystick::Joystick(SDL_Joystick* const joystick, const int sdl_index, const unsi #ifdef USE_SDL_HAPTIC // try to get supported ff effects m_haptic = SDL_HapticOpenFromJoystick( m_joystick ); - if ( m_haptic ) + if (m_haptic) { //SDL_HapticSetGain( m_haptic, 1000 ); //SDL_HapticSetAutocenter( m_haptic, 0 ); @@ -101,17 +101,17 @@ Joystick::Joystick(SDL_Joystick* const joystick, const int sdl_index, const unsi const unsigned int supported_effects = SDL_HapticQuery( m_haptic ); // constant effect - if ( supported_effects & SDL_HAPTIC_CONSTANT ) + if (supported_effects & SDL_HAPTIC_CONSTANT) { - AddOutput( new ConstantEffect( m_state_out.size() ) ); - m_state_out.push_back( EffectIDState() ); + m_state_out.push_back(EffectIDState()); + AddOutput(new ConstantEffect(m_state_out.back())); } // ramp effect - if ( supported_effects & SDL_HAPTIC_RAMP ) + if (supported_effects & SDL_HAPTIC_RAMP) { - AddOutput( new RampEffect( m_state_out.size() ) ); - m_state_out.push_back( EffectIDState() ); + m_state_out.push_back(EffectIDState()); + AddOutput(new RampEffect(m_state_out.back())); } } #endif @@ -125,9 +125,10 @@ Joystick::~Joystick() { // stop/destroy all effects SDL_HapticStopAll(m_haptic); - std::vector::iterator i = m_state_out.begin(), + std::list::iterator + i = m_state_out.begin(), e = m_state_out.end(); - for ( ; i!=e; ++i) + for ( ; i != e; ++i) if (i->id != -1) SDL_HapticDestroyEffect(m_haptic, i->id); // close haptic first @@ -150,36 +151,36 @@ std::string Joystick::RampEffect::GetName() const return "Ramp"; } -void Joystick::ConstantEffect::SetState( const ControlState state, Joystick::EffectIDState* const effect ) +void Joystick::ConstantEffect::SetState(const ControlState state) { if (state) { - effect->effect.type = SDL_HAPTIC_CONSTANT; - effect->effect.constant.length = SDL_HAPTIC_INFINITY; + m_effect.effect.type = SDL_HAPTIC_CONSTANT; + m_effect.effect.constant.length = SDL_HAPTIC_INFINITY; } else - effect->effect.type = 0; + m_effect.effect.type = 0; - Sint16 old = effect->effect.constant.level; - effect->effect.constant.level = state * 0x7FFF; - if (old != effect->effect.constant.level) - effect->changed = true; + const Sint16 old = m_effect.effect.constant.level; + m_effect.effect.constant.level = state * 0x7FFF; + if (old != m_effect.effect.constant.level) + m_effect.changed = true; } -void Joystick::RampEffect::SetState( const ControlState state, Joystick::EffectIDState* const effect ) +void Joystick::RampEffect::SetState(const ControlState state) { if (state) { - effect->effect.type = SDL_HAPTIC_RAMP; - effect->effect.ramp.length = SDL_HAPTIC_INFINITY; + m_effect.effect.type = SDL_HAPTIC_RAMP; + m_effect.effect.ramp.length = SDL_HAPTIC_INFINITY; } else - effect->effect.type = 0; + m_effect.effect.type = 0; - Sint16 old = effect->effect.ramp.start; - effect->effect.ramp.start = state * 0x7FFF; - if (old != effect->effect.ramp.start) - effect->changed = true; + const Sint16 old = m_effect.effect.ramp.start; + m_effect.effect.ramp.start = state * 0x7FFF; + if (old != m_effect.effect.ramp.start) + m_effect.changed = true; } #endif @@ -194,9 +195,11 @@ bool Joystick::UpdateInput() bool Joystick::UpdateOutput() { #ifdef USE_SDL_HAPTIC - std::vector::iterator i = m_state_out.begin(), + std::list::iterator + i = m_state_out.begin(), e = m_state_out.end(); - for ( ; i!=e; ++i) + for ( ; i != e; ++i) + { if (i->changed) // if SetState was called on this output { if (-1 == i->id) // effect isn't currently uploaded @@ -219,6 +222,7 @@ bool Joystick::UpdateOutput() i->changed = false; } + } #endif return true; } diff --git a/Source/Core/InputCommon/Src/ControllerInterface/SDL/SDL.h b/Source/Core/InputCommon/Src/ControllerInterface/SDL/SDL.h index 140a13b99b..5edc171dc4 100644 --- a/Source/Core/InputCommon/Src/ControllerInterface/SDL/SDL.h +++ b/Source/Core/InputCommon/Src/ControllerInterface/SDL/SDL.h @@ -3,6 +3,8 @@ #include "../ControllerInterface.h" +#include + #ifdef _WIN32 #include #else @@ -38,7 +40,7 @@ private: #ifdef USE_SDL_HAPTIC struct EffectIDState { - EffectIDState() : id(-1), changed(false) { memset( &effect, 0, sizeof(effect)); } + EffectIDState() : effect(SDL_HapticEffect()), id(-1), changed(false) {} SDL_HapticEffect effect; int id; @@ -86,20 +88,20 @@ private: { public: std::string GetName() const; - ConstantEffect( const size_t index ) : Output(index) {} - void SetState( const ControlState state, EffectIDState* const effect ); + ConstantEffect(EffectIDState& effect) : m_effect(effect) {} + void SetState(const ControlState state); private: - SDL_Joystick* const m_js; + EffectIDState& m_effect; }; class RampEffect : public Output { public: std::string GetName() const; - RampEffect( const size_t index ) : Output(index) {} - void SetState( const ControlState state, EffectIDState* const effect ); + RampEffect(EffectIDState& effect) : m_effect(effect) {} + void SetState(const ControlState state); private: - SDL_Joystick* const m_js; + EffectIDState& m_effect; }; #endif @@ -120,7 +122,7 @@ private: const unsigned int m_index; #ifdef USE_SDL_HAPTIC - std::vector m_state_out; + std::list m_state_out; SDL_Haptic* m_haptic; #endif };