All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
ILabelPicker.h
1 // Copyright eeGeo Ltd (2012-2014), All Rights Reserved
2 
3 #pragma once
4 
5 #include "Labels.h"
6 #include "Types.h"
7 #include "VectorMath.h"
8 #include "LabelLayer.h"
9 
10 
11 #include "LabelViewTypes.h"
12 
13 namespace Eegeo
14 {
15  namespace Labels
16  {
17 
19  {
20  public:
21  inline static u32 LabelLayerToPickingGroupMask(LabelLayer::IdType labelLayerId)
22  {
23  return 1 << labelLayerId;
24  }
25 
26  inline static u32 LabelComponentToMask(LabelComponent::Type labelComponent)
27  {
28  return 1 << labelComponent;
29  }
30 
31  static LabelPickQuery Make(const v2& screenPoint);
32 
33  static LabelPickQuery Make(const v2& screenPoint, LabelLayer::IdType labelLayerId);
34 
35  static LabelPickQuery Make(const v2& screenPoint, LabelLayer::IdType labelLayerId, LabelComponent::Type labelComponentType);
36 
37  LabelPickQuery(const v2& screenPoint, u32 pickingGroupMask, u32 labelComponentMask)
38  : m_screenPoint(screenPoint)
39  , m_pickingGroupMask(pickingGroupMask)
40  , m_labelComponentMask(labelComponentMask)
41  {}
42 
43  const v2& ScreenPoint() const { return m_screenPoint; }
44 
45  u32 PickingGroupMask() const { return m_pickingGroupMask; }
46 
47  u32 LabelComponentMask() const { return m_labelComponentMask; }
48 
49  private:
50  v2 m_screenPoint;
51  u32 m_pickingGroupMask;
52  u32 m_labelComponentMask;
53  };
54 
56  {
57  public:
58 
59  static LabelPickResult Make(const LabelView* pLabelView,
60  LabelComponent::Type labelComponentType);
61 
62 
63  LabelPickResult(bool didHit,
64  LabelComponent::Type labelComponentType,
65  const IAnchoredLabel* pAnchoredLabel
66  )
67  : m_didHit(didHit)
68  , m_labelComponentType(labelComponentType)
69  , m_pAnchoredLabel(pAnchoredLabel)
70  {}
71 
72  bool DidHit() const
73  {
74  return m_didHit;
75  }
76 
77  bool operator()() const
78  {
79  return DidHit();
80  }
81 
82  const IAnchoredLabel* GetLabelModel() const { return m_pAnchoredLabel; }
83 
84  LabelComponent::Type GetLabelComponentType() const { return m_labelComponentType; }
85 
86  private:
87  bool m_didHit;
88  LabelComponent::Type m_labelComponentType;
89  const IAnchoredLabel* m_pAnchoredLabel;
90  };
91 
92 
94  {
95  public:
96  virtual ~ILabelPicker() {}
97 
98  virtual LabelPickResult Pick(const LabelPickQuery& query) = 0;
99  };
100  }
101 }