SFML.h 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. /*
  2. GWEN
  3. Copyright (c) 2011 Facepunch Studios
  4. See license in Gwen.h
  5. */
  6. #pragma once
  7. #ifndef GWEN_INPUT_SFML_H
  8. #define GWEN_INPUT_SFML_H
  9. #include "Gwen/InputHandler.h"
  10. #include "Gwen/Gwen.h"
  11. #include "Gwen/Controls/Canvas.h"
  12. #include <SFML/Graphics.hpp>
  13. namespace Gwen
  14. {
  15. namespace Input
  16. {
  17. class SFML
  18. {
  19. public:
  20. SFML()
  21. {
  22. m_Canvas = NULL;
  23. m_MouseX = 0;
  24. m_MouseY = 0;
  25. }
  26. void Initialize( Gwen::Controls::Canvas* c )
  27. {
  28. m_Canvas = c;
  29. }
  30. unsigned char TranslateKeyCode( int iKeyCode )
  31. {
  32. switch ( iKeyCode )
  33. {
  34. #if SFML_VERSION_MAJOR == 2
  35. case sf::Keyboard::Back: return Gwen::Key::Backspace;
  36. case sf::Keyboard::Return: return Gwen::Key::Return;
  37. case sf::Keyboard::Escape: return Gwen::Key::Escape;
  38. case sf::Keyboard::Tab: return Gwen::Key::Tab;
  39. case sf::Keyboard::Space: return Gwen::Key::Space;
  40. case sf::Keyboard::Up: return Gwen::Key::Up;
  41. case sf::Keyboard::Down: return Gwen::Key::Down;
  42. case sf::Keyboard::Left: return Gwen::Key::Left;
  43. case sf::Keyboard::Right: return Gwen::Key::Right;
  44. case sf::Keyboard::Home: return Gwen::Key::Home;
  45. case sf::Keyboard::End: return Gwen::Key::End;
  46. case sf::Keyboard::Delete: return Gwen::Key::Delete;
  47. case sf::Keyboard::LControl: return Gwen::Key::Control;
  48. case sf::Keyboard::LAlt: return Gwen::Key::Alt;
  49. case sf::Keyboard::LShift: return Gwen::Key::Shift;
  50. case sf::Keyboard::RControl: return Gwen::Key::Control;
  51. case sf::Keyboard::RAlt: return Gwen::Key::Alt;
  52. case sf::Keyboard::RShift: return Gwen::Key::Shift;
  53. #else
  54. case sf::Key::Back: return Gwen::Key::Backspace;
  55. case sf::Key::Return: return Gwen::Key::Return;
  56. case sf::Key::Escape: return Gwen::Key::Escape;
  57. case sf::Key::Tab: return Gwen::Key::Tab;
  58. case sf::Key::Space: return Gwen::Key::Space;
  59. case sf::Key::Up: return Gwen::Key::Up;
  60. case sf::Key::Down: return Gwen::Key::Down;
  61. case sf::Key::Left: return Gwen::Key::Left;
  62. case sf::Key::Right: return Gwen::Key::Right;
  63. case sf::Key::Home: return Gwen::Key::Home;
  64. case sf::Key::End: return Gwen::Key::End;
  65. case sf::Key::Delete: return Gwen::Key::Delete;
  66. case sf::Key::LControl: return Gwen::Key::Control;
  67. case sf::Key::LAlt: return Gwen::Key::Alt;
  68. case sf::Key::LShift: return Gwen::Key::Shift;
  69. case sf::Key::RControl: return Gwen::Key::Control;
  70. case sf::Key::RAlt: return Gwen::Key::Alt;
  71. case sf::Key::RShift: return Gwen::Key::Shift;
  72. #endif
  73. }
  74. return Gwen::Key::Invalid;
  75. }
  76. bool ProcessMessage( sf::Event& event )
  77. {
  78. if ( !m_Canvas ) return false;
  79. switch(event.Type)
  80. {
  81. case sf::Event::MouseMoved:
  82. {
  83. int dx = event.MouseMove.X - m_MouseX;
  84. int dy = event.MouseMove.Y - m_MouseY;
  85. m_MouseX = event.MouseMove.X;
  86. m_MouseY = event.MouseMove.Y;
  87. return m_Canvas->InputMouseMoved( m_MouseX, m_MouseY, dx, dy );
  88. }
  89. case sf::Event::MouseButtonPressed:
  90. case sf::Event::MouseButtonReleased:
  91. {
  92. return m_Canvas->InputMouseButton( event.MouseButton.Button, event.Type == sf::Event::MouseButtonPressed );
  93. }
  94. case sf::Event::MouseWheelMoved:
  95. {
  96. return m_Canvas->InputMouseWheel( event.MouseWheel.Delta * 60 );
  97. }
  98. case sf::Event::TextEntered:
  99. {
  100. return m_Canvas->InputCharacter( event.Text.Unicode );
  101. }
  102. case sf::Event::KeyPressed:
  103. case sf::Event::KeyReleased:
  104. {
  105. bool bPressed = (event.Type == sf::Event::KeyPressed);
  106. if ( event.Key.Control && bPressed && event.Key.Code >= 'a' && event.Key.Code <= 'z' )
  107. {
  108. return m_Canvas->InputCharacter( event.Key.Code );
  109. }
  110. unsigned char iKey = TranslateKeyCode( event.Key.Code );
  111. return m_Canvas->InputKey( iKey, bPressed );
  112. }
  113. }
  114. return false;
  115. }
  116. protected:
  117. Gwen::Controls::Canvas* m_Canvas;
  118. int m_MouseX;
  119. int m_MouseY;
  120. };
  121. }
  122. }
  123. #endif