28 #include <SFML/Window/WindowImpl.hpp>
29 #include <SFML/Window/Event.hpp>
30 #include <SFML/Window/WindowListener.hpp>
34 #if defined(SFML_SYSTEM_WINDOWS)
36 #include <SFML/Window/Win32/WindowImplWin32.hpp>
37 typedef sf::priv::WindowImplWin32 WindowImplType;
39 #elif defined(SFML_SYSTEM_LINUX) || defined(SFML_SYSTEM_FREEBSD)
41 #include <SFML/Window/Linux/WindowImplX11.hpp>
42 typedef sf::priv::WindowImplX11 WindowImplType;
44 #elif defined(SFML_SYSTEM_MACOS)
46 #include <SFML/Window/Cocoa/WindowImplCocoa.hpp>
47 typedef sf::priv::WindowImplCocoa WindowImplType;
59 WindowImpl* WindowImpl::New()
61 return new WindowImplType();
68 WindowImpl* WindowImpl::New(VideoMode Mode,
const std::string& Title,
unsigned long WindowStyle, WindowSettings& Params)
70 return new WindowImplType(Mode, Title, WindowStyle, Params);
77 WindowImpl* WindowImpl::New(WindowHandle Handle, WindowSettings& Params)
79 return new WindowImplType(Handle, Params);
86 WindowImpl::WindowImpl() :
97 WindowImpl::~WindowImpl()
106 void WindowImpl::AddListener(WindowListener* Listener)
109 myListeners.insert(Listener);
116 void WindowImpl::RemoveListener(WindowListener* Listener)
118 myListeners.erase(Listener);
125 void WindowImpl::Initialize()
130 myJoysticks[i].Initialize(i);
131 myJoyStates[i] = myJoysticks[i].UpdateState();
139 unsigned int WindowImpl::GetWidth()
const
148 unsigned int WindowImpl::GetHeight()
const
158 void WindowImpl::SetJoystickThreshold(
float Threshold)
160 myJoyThreshold = Threshold;
167 void WindowImpl::DoEvents()
170 ProcessJoystickEvents();
180 bool WindowImpl::IsContextActive()
182 return WindowImplType::IsContextActive();
189 void WindowImpl::SendEvent(
const Event& EventToSend)
191 for (std::set<WindowListener*>::iterator i = myListeners.begin(); i != myListeners.end(); ++i)
193 (*i)->OnEvent(EventToSend);
203 int WindowImpl::EvaluateConfig(
const VideoMode& Mode,
const WindowSettings& Settings,
int ColorBits,
int DepthBits,
int StencilBits,
int Antialiasing)
205 return abs(static_cast<int>(Mode.BitsPerPixel - ColorBits)) +
206 abs(static_cast<int>(Settings.DepthBits - DepthBits)) +
207 abs(static_cast<int>(Settings.StencilBits - StencilBits)) +
208 abs(static_cast<int>(Settings.AntialiasingLevel - Antialiasing));
215 void WindowImpl::ProcessJoystickEvents()
220 JoystickState PreviousState = myJoyStates[i];
221 myJoyStates[i] = myJoysticks[i].UpdateState();
224 for (
unsigned int j = 0; j < Joy::AxisCount; ++j)
226 Joy::Axis Axis =
static_cast<Joy::Axis
>(j);
227 if (myJoysticks[i].HasAxis(Axis))
229 float PrevPos = PreviousState.Axis[j];
230 float CurrPos = myJoyStates[i].Axis[j];
231 if (fabs(CurrPos - PrevPos) >= myJoyThreshold)
234 Event.Type = Event::JoyMoved;
235 Event.JoyMove.JoystickId = i;
236 Event.JoyMove.Axis = Axis;
237 Event.JoyMove.Position = CurrPos;
244 for (
unsigned int j = 0; j < myJoysticks[i].GetButtonsCount(); ++j)
246 bool PrevPressed = PreviousState.Buttons[j];
247 bool CurrPressed = myJoyStates[i].Buttons[j];
249 if ((!PrevPressed && CurrPressed) || (PrevPressed && !CurrPressed))
252 Event.Type = CurrPressed ? Event::JoyButtonPressed : Event::JoyButtonReleased;
253 Event.JoyButton.JoystickId = i;
254 Event.JoyButton.Button = j;
Total number of supported joysticks.