/* GWEN Copyright (c) 2011 Facepunch Studios See license in Gwen.h */ #pragma once #ifndef GWEN_INPUT_SFML_H #define GWEN_INPUT_SFML_H #include "Gwen/InputHandler.h" #include "Gwen/Gwen.h" #include "Gwen/Controls/Canvas.h" #include namespace Gwen { namespace Input { class SFML { public: SFML() { m_Canvas = NULL; m_MouseX = 0; m_MouseY = 0; } void Initialize( Gwen::Controls::Canvas* c ) { m_Canvas = c; } unsigned char TranslateKeyCode( int iKeyCode ) { switch ( iKeyCode ) { #if SFML_VERSION_MAJOR == 2 case sf::Keyboard::Back: return Gwen::Key::Backspace; case sf::Keyboard::Return: return Gwen::Key::Return; case sf::Keyboard::Escape: return Gwen::Key::Escape; case sf::Keyboard::Tab: return Gwen::Key::Tab; case sf::Keyboard::Space: return Gwen::Key::Space; case sf::Keyboard::Up: return Gwen::Key::Up; case sf::Keyboard::Down: return Gwen::Key::Down; case sf::Keyboard::Left: return Gwen::Key::Left; case sf::Keyboard::Right: return Gwen::Key::Right; case sf::Keyboard::Home: return Gwen::Key::Home; case sf::Keyboard::End: return Gwen::Key::End; case sf::Keyboard::Delete: return Gwen::Key::Delete; case sf::Keyboard::LControl: return Gwen::Key::Control; case sf::Keyboard::LAlt: return Gwen::Key::Alt; case sf::Keyboard::LShift: return Gwen::Key::Shift; case sf::Keyboard::RControl: return Gwen::Key::Control; case sf::Keyboard::RAlt: return Gwen::Key::Alt; case sf::Keyboard::RShift: return Gwen::Key::Shift; #else case sf::Key::Back: return Gwen::Key::Backspace; case sf::Key::Return: return Gwen::Key::Return; case sf::Key::Escape: return Gwen::Key::Escape; case sf::Key::Tab: return Gwen::Key::Tab; case sf::Key::Space: return Gwen::Key::Space; case sf::Key::Up: return Gwen::Key::Up; case sf::Key::Down: return Gwen::Key::Down; case sf::Key::Left: return Gwen::Key::Left; case sf::Key::Right: return Gwen::Key::Right; case sf::Key::Home: return Gwen::Key::Home; case sf::Key::End: return Gwen::Key::End; case sf::Key::Delete: return Gwen::Key::Delete; case sf::Key::LControl: return Gwen::Key::Control; case sf::Key::LAlt: return Gwen::Key::Alt; case sf::Key::LShift: return Gwen::Key::Shift; case sf::Key::RControl: return Gwen::Key::Control; case sf::Key::RAlt: return Gwen::Key::Alt; case sf::Key::RShift: return Gwen::Key::Shift; #endif } return Gwen::Key::Invalid; } bool ProcessMessage( sf::Event& event ) { if ( !m_Canvas ) return false; switch(event.Type) { case sf::Event::MouseMoved: { int dx = event.MouseMove.X - m_MouseX; int dy = event.MouseMove.Y - m_MouseY; m_MouseX = event.MouseMove.X; m_MouseY = event.MouseMove.Y; return m_Canvas->InputMouseMoved( m_MouseX, m_MouseY, dx, dy ); } case sf::Event::MouseButtonPressed: case sf::Event::MouseButtonReleased: { return m_Canvas->InputMouseButton( event.MouseButton.Button, event.Type == sf::Event::MouseButtonPressed ); } case sf::Event::MouseWheelMoved: { return m_Canvas->InputMouseWheel( event.MouseWheel.Delta * 60 ); } case sf::Event::TextEntered: { return m_Canvas->InputCharacter( event.Text.Unicode ); } case sf::Event::KeyPressed: case sf::Event::KeyReleased: { bool bPressed = (event.Type == sf::Event::KeyPressed); if ( event.Key.Control && bPressed && event.Key.Code >= 'a' && event.Key.Code <= 'z' ) { return m_Canvas->InputCharacter( event.Key.Code ); } unsigned char iKey = TranslateKeyCode( event.Key.Code ); return m_Canvas->InputKey( iKey, bPressed ); } } return false; } protected: Gwen::Controls::Canvas* m_Canvas; int m_MouseX; int m_MouseY; }; } } #endif