ASPiK SDK
itouchevent.h
1 // This file is part of VSTGUI. It is subject to the license terms
2 // in the LICENSE file found in the top-level directory of this
3 // distribution and at http://github.com/steinbergmedia/vstgui/LICENSE
4 
5 #ifndef __itouchevent__
6 #define __itouchevent__
7 
8 #include "vstguifwd.h"
9 #include "cpoint.h"
10 
11 #if VSTGUI_TOUCH_EVENT_HANDLING
12 
13 #include <map>
14 
15 namespace VSTGUI {
16 
17 //-----------------------------------------------------------------------------
20 //-----------------------------------------------------------------------------
21 class ITouchEvent
22 {
23 public:
24  enum TouchState {
25  kBegan,
26  kMoved,
27  kEnded,
28  kNoChange,
29  kCanceled,
30  kUndefined
31  };
32  struct Touch {
33  double timeStamp;
34  TouchState state;
35  CPoint location;
36  CView* target;
37  bool targetIsSingleTouch;
38  uint32_t tapCount;
39 
40  Touch () : timeStamp (0), state (kUndefined), target (0), targetIsSingleTouch (false), tapCount (0) {}
41  };
42  using TouchPair = std::pair<int32_t, ITouchEvent::Touch>;
43  using TouchMap = std::map<int32_t, Touch>;
44 
45  int32_t numTouches () const { return static_cast<int32_t> (touches.size ()); }
46 
47  TouchMap::const_iterator begin () const { return touches.begin (); }
48  TouchMap::const_iterator end () const { return touches.end (); }
49 
50  const Touch* find (int32_t identifier) const
51  {
52  TouchMap::const_iterator it = touches.find (identifier);
53  if (it != touches.end ())
54  return &(it->second);
55  return 0;
56  }
57 
58  bool setTouchTarget (int32_t identifier, CView* view, bool targetIsSingleTouch)
59  {
60  TouchMap::iterator it = touches.find (identifier);
61  if (it != touches.end () && it->second.target == 0)
62  {
63  it->second.target = view;
64  it->second.targetIsSingleTouch = targetIsSingleTouch;
65  return true;
66  }
67  return false;
68  }
69 
70  bool unsetTouchTarget (int32_t identifier, CView* view)
71  {
72  TouchMap::iterator it = touches.find (identifier);
73  if (it != touches.end () && it->second.target == view)
74  {
75  it->second.target = nullptr;
76  return true;
77  }
78  return false;
79  }
80 
81  virtual double getTimeStamp () const = 0;
82 protected:
83  ITouchEvent () {}
84  virtual ~ITouchEvent () noexcept = default;
85 
86  TouchMap touches;
87 };
88 
89 } // namespace
90 
91 #endif // VSTGUI_TOUCH_EVENT_HANDLING
92 
93 #endif // __itouchevent__
Definition: customcontrols.cpp:8