OLD | NEW |
1 // Copyright 2016 PDFium Authors. All rights reserved. | 1 // Copyright 2016 PDFium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com | 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com |
6 | 6 |
7 #ifndef XFA_FWL_CORE_CFWL_MESSAGE_H_ | 7 #ifndef XFA_FWL_CORE_CFWL_MESSAGE_H_ |
8 #define XFA_FWL_CORE_CFWL_MESSAGE_H_ | 8 #define XFA_FWL_CORE_CFWL_MESSAGE_H_ |
9 | 9 |
| 10 #include <memory> |
| 11 |
10 #include "core/fxcrt/fx_basic.h" | 12 #include "core/fxcrt/fx_basic.h" |
11 #include "core/fxcrt/fx_string.h" | 13 #include "core/fxcrt/fx_string.h" |
12 #include "core/fxcrt/fx_system.h" | 14 #include "core/fxcrt/fx_system.h" |
13 #include "xfa/fwl/core/fwl_error.h" | 15 #include "xfa/fwl/core/fwl_error.h" |
14 | 16 |
15 enum class CFWL_MessageType { | 17 enum class CFWL_MessageType { |
16 None = 0, | 18 None = 0, |
17 Key, | 19 Key, |
18 KillFocus, | 20 KillFocus, |
19 Mouse, | 21 Mouse, |
20 MouseWheel, | 22 MouseWheel, |
21 SetFocus | 23 SetFocus |
22 }; | 24 }; |
23 | 25 |
24 enum class FWL_MouseCommand { | |
25 LeftButtonDown, | |
26 LeftButtonUp, | |
27 LeftButtonDblClk, | |
28 RightButtonDown, | |
29 RightButtonUp, | |
30 RightButtonDblClk, | |
31 Move, | |
32 Enter, | |
33 Leave, | |
34 Hover | |
35 }; | |
36 | |
37 enum class FWL_KeyCommand { KeyDown, KeyUp, Char }; | |
38 | |
39 class IFWL_Widget; | 26 class IFWL_Widget; |
40 | 27 |
41 class CFWL_Message { | 28 class CFWL_Message { |
42 public: | 29 public: |
43 CFWL_Message(); | 30 CFWL_Message(); |
44 virtual ~CFWL_Message(); | 31 virtual ~CFWL_Message(); |
45 | 32 |
46 virtual CFWL_Message* Clone(); | 33 virtual std::unique_ptr<CFWL_Message> Clone(); |
47 virtual CFWL_MessageType GetClassID() const; | 34 virtual CFWL_MessageType GetClassID() const; |
48 | 35 |
49 uint32_t Release(); | |
50 CFWL_Message* Retain(); | |
51 | |
52 IFWL_Widget* m_pSrcTarget; | 36 IFWL_Widget* m_pSrcTarget; |
53 IFWL_Widget* m_pDstTarget; | 37 IFWL_Widget* m_pDstTarget; |
54 uint32_t m_dwExtend; | 38 uint32_t m_dwExtend; |
55 | |
56 private: | |
57 uint32_t m_dwRefCount; | |
58 }; | 39 }; |
59 | 40 |
60 inline CFWL_Message::CFWL_Message() | |
61 : m_pSrcTarget(nullptr), | |
62 m_pDstTarget(nullptr), | |
63 m_dwExtend(0), | |
64 m_dwRefCount(1) {} | |
65 | |
66 inline CFWL_Message::~CFWL_Message() {} | |
67 | |
68 inline CFWL_Message* CFWL_Message::Clone() { | |
69 return nullptr; | |
70 } | |
71 | |
72 inline CFWL_MessageType CFWL_Message::GetClassID() const { | |
73 return CFWL_MessageType::None; | |
74 } | |
75 | |
76 inline uint32_t CFWL_Message::Release() { | |
77 m_dwRefCount--; | |
78 uint32_t dwRefCount = m_dwRefCount; | |
79 if (!m_dwRefCount) | |
80 delete this; | |
81 return dwRefCount; | |
82 } | |
83 | |
84 inline CFWL_Message* CFWL_Message::Retain() { | |
85 m_dwRefCount++; | |
86 return this; | |
87 } | |
88 | |
89 #define FWL_MESSAGE_DEF(classname, msgType, ...) \ | |
90 class classname : public CFWL_Message { \ | |
91 public: \ | |
92 classname(); \ | |
93 ~classname() override; \ | |
94 CFWL_Message* Clone() override; \ | |
95 CFWL_MessageType GetClassID() const override; \ | |
96 __VA_ARGS__ \ | |
97 }; \ | |
98 inline classname::classname() {} \ | |
99 inline classname::~classname() {} \ | |
100 inline CFWL_Message* classname::Clone() { return new classname(*this); } \ | |
101 inline CFWL_MessageType classname::GetClassID() const { return msgType; } | |
102 | |
103 FWL_MESSAGE_DEF(CFWL_MsgMouse, CFWL_MessageType::Mouse, FX_FLOAT m_fx; | |
104 FX_FLOAT m_fy; | |
105 uint32_t m_dwFlags; | |
106 FWL_MouseCommand m_dwCmd;) | |
107 | |
108 FWL_MESSAGE_DEF(CFWL_MsgMouseWheel, CFWL_MessageType::MouseWheel, FX_FLOAT m_fx; | |
109 FX_FLOAT m_fy; | |
110 FX_FLOAT m_fDeltaX; | |
111 FX_FLOAT m_fDeltaY; | |
112 uint32_t m_dwFlags;) | |
113 | |
114 FWL_MESSAGE_DEF(CFWL_MsgSetFocus, | |
115 CFWL_MessageType::SetFocus, | |
116 IFWL_Widget* m_pKillFocus;) | |
117 | |
118 FWL_MESSAGE_DEF(CFWL_MsgKillFocus, | |
119 CFWL_MessageType::KillFocus, | |
120 IFWL_Widget* m_pSetFocus;) | |
121 | |
122 FWL_MESSAGE_DEF(CFWL_MsgKey, CFWL_MessageType::Key, uint32_t m_dwKeyCode; | |
123 uint32_t m_dwFlags; | |
124 FWL_KeyCommand m_dwCmd;) | |
125 | 41 |
126 #endif // XFA_FWL_CORE_CFWL_MESSAGE_H_ | 42 #endif // XFA_FWL_CORE_CFWL_MESSAGE_H_ |
OLD | NEW |