#pragma region CPL License /* Nuclex Native Framework Copyright (C) 2002-2013 Nuclex Development Labs This library is free software; you can redistribute it and/or modify it under the terms of the IBM Common Public License as published by the IBM Corporation; either version 1.0 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the IBM Common Public License for more details. You should have received a copy of the IBM Common Public License along with this library */ #pragma endregion // CPL License // If the library is compiled as a DLL, this ensures symbols are exported #define NUCLEX_INPUT_SOURCE 1 #include "Nuclex/Input/Config.h" #if defined(NUCLEX_INPUT_WINRT) #include "WinRTMouse.h" using namespace Windows::Foundation; using namespace Windows::UI::Core; namespace Nuclex { namespace Input { namespace Devices { // ------------------------------------------------------------------------------------------- // void WinRTMouse::SetLocked(bool locked /* = true */) { //this->lo //throw std::runtime_error("Not implemented yet"); } // ------------------------------------------------------------------------------------------- // bool WinRTMouse::IsLocked() const { return false; } // ------------------------------------------------------------------------------------------- // void WinRTMouse::InjectButtonPress( Windows::UI::Core::CoreWindow ^sender, Windows::UI::Core::PointerEventArgs ^arguments ) { int pressedButtons = 0; if(arguments->CurrentPoint->Properties->IsLeftButtonPressed) { pressedButtons |= MouseButtons::Left; } if(arguments->CurrentPoint->Properties->IsMiddleButtonPressed) { pressedButtons |= MouseButtons::Middle; } if(arguments->CurrentPoint->Properties->IsRightButtonPressed) { pressedButtons |= MouseButtons::Right; } bufferCursorMovementIfPositionChanged(arguments); BufferedMouse::BufferButtonPress(static_cast(pressedButtons)); } // ------------------------------------------------------------------------------------------- // void WinRTMouse::InjectButtonRelease( Windows::UI::Core::CoreWindow ^sender, Windows::UI::Core::PointerEventArgs ^arguments ) { int releasedButtons = 0; if(!arguments->CurrentPoint->Properties->IsLeftButtonPressed) { releasedButtons |= MouseButtons::Left; } if(!arguments->CurrentPoint->Properties->IsMiddleButtonPressed) { releasedButtons |= MouseButtons::Middle; } if(!arguments->CurrentPoint->Properties->IsRightButtonPressed) { releasedButtons |= MouseButtons::Right; } bufferCursorMovementIfPositionChanged(arguments); BufferedMouse::BufferButtonRelease(static_cast(releasedButtons)); } // ------------------------------------------------------------------------------------------- // void WinRTMouse::InjectCursorMovement( Windows::UI::Core::CoreWindow ^sender, Windows::UI::Core::PointerEventArgs ^arguments ) { bufferCursorMovementIfPositionChanged(arguments); } // ------------------------------------------------------------------------------------------- // void WinRTMouse::InjectWheelRotation( Windows::UI::Core::CoreWindow ^sender, Windows::UI::Core::PointerEventArgs ^arguments ) { bufferCursorMovementIfPositionChanged(arguments); BufferWheelRotation( static_cast(arguments->CurrentPoint->Properties->MouseWheelDelta) ); } // ------------------------------------------------------------------------------------------- // void WinRTMouse::bufferCursorMovementIfPositionChanged( Windows::UI::Core::PointerEventArgs ^arguments ) { int newX = static_cast(arguments->CurrentPoint->Position.X); int newY = static_cast(arguments->CurrentPoint->Position.Y); bool wasMoved = (newX != this->cursorX) || (newY != this->cursorY); if(wasMoved) { this->cursorX = newX; this->cursorY = newY; BufferCursorMovement(newX, newY); } } // ------------------------------------------------------------------------------------------- // }}} // namespace Nuclex::Input::Devices #endif // defined(NUCLEX_INPUT_WINRT)