1 /*
2  *  Copyright (C) 2016-2018 Team Kodi
3  *  This file is part of Kodi - https://kodi.tv
4  *
5  *  SPDX-License-Identifier: GPL-2.0-or-later
6  *  See LICENSES/README.md for more information.
7  */
8 
9 #pragma once
10 
11 #include "input/mouse/MouseTypes.h"
12 #include "input/mouse/interfaces/IMouseDriverHandler.h"
13 
14 namespace KODI
15 {
16 namespace JOYSTICK
17 {
18 class IButtonMap;
19 }
20 
21 namespace MOUSE
22 {
23 class IMouseInputHandler;
24 
25 /*!
26  * \ingroup mouse
27  * \brief Class to translate input from driver info to higher-level features
28  */
29 class CMouseInputHandling : public IMouseDriverHandler
30 {
31 public:
32   CMouseInputHandling(IMouseInputHandler* handler, JOYSTICK::IButtonMap* buttonMap);
33 
34   ~CMouseInputHandling(void) override = default;
35 
36   // implementation of IMouseDriverHandler
37   bool OnPosition(int x, int y) override;
38   bool OnButtonPress(BUTTON_ID button) override;
39   void OnButtonRelease(BUTTON_ID button) override;
40 
41 private:
42   // Utility functions
43   static POINTER_DIRECTION GetPointerDirection(int x, int y);
44   static POINTER_DIRECTION GetOrthogonalDirectionCCW(POINTER_DIRECTION direction);
45 
46   static void GetRotation(POINTER_DIRECTION source,
47                           POINTER_DIRECTION target,
48                           int (&rotation)[2][2]);
49   static void GetRotation(int deg, int (&rotation)[2][2]);
50 
51   static void GetReflectionCCW(POINTER_DIRECTION source,
52                                POINTER_DIRECTION target,
53                                int (&reflection)[2][2]);
54   static void GetReflection(int deg, int (&reflection)[2][2]);
55 
56   // Construction parameters
57   IMouseInputHandler* const m_handler;
58   JOYSTICK::IButtonMap* const m_buttonMap;
59 
60   // Mouse parameters
61   bool m_bHasPosition = false;
62   int m_x = 0;
63   int m_y = 0;
64 };
65 } // namespace MOUSE
66 } // namespace KODI
67