Chromium Code Reviews| Index: xfa/fwl/core/cfwl_message.h |
| diff --git a/xfa/fwl/core/cfwl_message.h b/xfa/fwl/core/cfwl_message.h |
| index 74401c3e34454adc2ebdf1cb30bb820c91f08703..f7e0ec4b6527d15202961f65543ee1bfd07bd81f 100644 |
| --- a/xfa/fwl/core/cfwl_message.h |
| +++ b/xfa/fwl/core/cfwl_message.h |
| @@ -53,31 +53,15 @@ class IFWL_Widget; |
| class CFWL_Message { |
| public: |
| - CFWL_Message() |
| - : m_pSrcTarget(nullptr), |
| - m_pDstTarget(nullptr), |
| - m_dwExtend(0), |
| - m_dwRefCount(1) {} |
| - virtual ~CFWL_Message() {} |
| - |
| - virtual CFWL_Message* Clone() { return nullptr; } |
| - virtual FWL_Error GetClassName(CFX_WideString& wsClass) const { |
| - return FWL_Error::Succeeded; |
| - } |
| - virtual CFWL_MessageType GetClassID() const { return CFWL_MessageType::None; } |
| - |
| - uint32_t Release() { |
| - m_dwRefCount--; |
| - uint32_t dwRefCount = m_dwRefCount; |
| - if (!m_dwRefCount) |
| - delete this; |
| - return dwRefCount; |
| - } |
| - |
| - CFWL_Message* Retain() { |
| - m_dwRefCount++; |
| - return this; |
| - } |
| + CFWL_Message(); |
| + virtual ~CFWL_Message(); |
| + |
| + virtual CFWL_Message* Clone(); |
| + virtual FWL_Error GetClassName(CFX_WideString& wsClass) const; |
| + virtual CFWL_MessageType GetClassID() const; |
| + |
| + uint32_t Release(); |
| + CFWL_Message* Retain(); |
| IFWL_Widget* m_pSrcTarget; |
| IFWL_Widget* m_pDstTarget; |
| @@ -87,91 +71,134 @@ class CFWL_Message { |
| uint32_t m_dwRefCount; |
| }; |
| -#define BEGIN_FWL_MESSAGE_DEF(classname, msgType) \ |
| - class classname : public CFWL_Message { \ |
| - public: \ |
| - classname() : CFWL_Message() {} \ |
| - CFWL_Message* Clone() override { return new classname(*this); } \ |
| - FWL_Error GetClassName(CFX_WideString& wsClass) const override { \ |
| - wsClass = L## #classname; \ |
| - return FWL_Error::Succeeded; \ |
| - } \ |
| - CFWL_MessageType GetClassID() const override { return msgType; } |
| - |
| -#define END_FWL_MESSAGE_DEF \ |
| - } \ |
| - ; // NOLINT |
| - |
| -BEGIN_FWL_MESSAGE_DEF(CFWL_MsgActivate, CFWL_MessageType::Activate) |
| -END_FWL_MESSAGE_DEF |
| - |
| -BEGIN_FWL_MESSAGE_DEF(CFWL_MsgDeactivate, CFWL_MessageType::Deactivate) |
| -END_FWL_MESSAGE_DEF |
| - |
| -BEGIN_FWL_MESSAGE_DEF(CFWL_MsgMouse, CFWL_MessageType::Mouse) |
| -FX_FLOAT m_fx; |
| -FX_FLOAT m_fy; |
| -uint32_t m_dwFlags; |
| -FWL_MouseCommand m_dwCmd; |
| -END_FWL_MESSAGE_DEF |
| - |
| -BEGIN_FWL_MESSAGE_DEF(CFWL_MsgMouseWheel, CFWL_MessageType::MouseWheel) |
| -FX_FLOAT m_fx; |
| -FX_FLOAT m_fy; |
| -FX_FLOAT m_fDeltaX; |
| -FX_FLOAT m_fDeltaY; |
| -uint32_t m_dwFlags; |
| -END_FWL_MESSAGE_DEF |
| - |
| -BEGIN_FWL_MESSAGE_DEF(CFWL_MsgSetFocus, CFWL_MessageType::SetFocus) |
| -IFWL_Widget* m_pKillFocus; |
| -END_FWL_MESSAGE_DEF |
| - |
| -BEGIN_FWL_MESSAGE_DEF(CFWL_MsgKillFocus, CFWL_MessageType::KillFocus) |
| -IFWL_Widget* m_pSetFocus; |
| -END_FWL_MESSAGE_DEF |
| - |
| -BEGIN_FWL_MESSAGE_DEF(CFWL_MsgKey, CFWL_MessageType::Key) |
| -uint32_t m_dwKeyCode; |
| -uint32_t m_dwFlags; |
| -FWL_KeyCommand m_dwCmd; |
| -END_FWL_MESSAGE_DEF |
| - |
| -BEGIN_FWL_MESSAGE_DEF(CFWL_MsgCursor, CFWL_MessageType::Cursor) |
| -END_FWL_MESSAGE_DEF |
| - |
| -BEGIN_FWL_MESSAGE_DEF(CFWL_MsgSize, CFWL_MessageType::Size) |
| -int32_t m_iWidth; |
| -int32_t m_iHeight; |
| -END_FWL_MESSAGE_DEF |
| - |
| -BEGIN_FWL_MESSAGE_DEF(CFWL_MsgWindowMove, CFWL_MessageType::WindowMove) |
| -FX_FLOAT m_fx; |
| -FX_FLOAT m_fy; |
| -END_FWL_MESSAGE_DEF |
| - |
| -BEGIN_FWL_MESSAGE_DEF(CFWL_MsgDropFiles, CFWL_MessageType::DropFiles) |
| -CFWL_MsgDropFiles(const CFWL_MsgDropFiles& copy) { |
| - m_pDstTarget = copy.m_pDstTarget; |
| - m_pSrcTarget = copy.m_pSrcTarget; |
| - m_fx = copy.m_fx; |
| - m_fy = copy.m_fy; |
| - m_files.Append(copy.m_files); |
| +inline CFWL_Message::CFWL_Message() |
| + : m_pSrcTarget(nullptr), |
| + m_pDstTarget(nullptr), |
| + m_dwExtend(0), |
| + m_dwRefCount(1) {} |
| + |
| +inline CFWL_Message::~CFWL_Message() {} |
| + |
| +inline CFWL_Message* CFWL_Message::Clone() { |
| + return nullptr; |
| +} |
| + |
| +inline FWL_Error CFWL_Message::GetClassName(CFX_WideString& wsClass) const { |
| + return FWL_Error::Succeeded; |
| } |
| -FX_FLOAT m_fx; |
| -FX_FLOAT m_fy; |
| -CFX_WideStringArray m_files; |
| -END_FWL_MESSAGE_DEF |
| -BEGIN_FWL_MESSAGE_DEF(CFWL_MsgTaskClicked, CFWL_MessageType::TaskClicked) |
| -FX_FLOAT m_fx; |
| -FX_FLOAT m_fy; |
| -END_FWL_MESSAGE_DEF |
| +inline CFWL_MessageType CFWL_Message::GetClassID() const { |
| + return CFWL_MessageType::None; |
| +} |
| -BEGIN_FWL_MESSAGE_DEF(CFWL_MsgClose, CFWL_MessageType::Close) |
| -END_FWL_MESSAGE_DEF |
| +inline uint32_t CFWL_Message::Release() { |
| + m_dwRefCount--; |
| + uint32_t dwRefCount = m_dwRefCount; |
| + if (!m_dwRefCount) |
| + delete this; |
| + return dwRefCount; |
| +} |
| + |
| +inline CFWL_Message* CFWL_Message::Retain() { |
| + m_dwRefCount++; |
| + return this; |
| +} |
| -BEGIN_FWL_MESSAGE_DEF(CFWL_MsgWindowWillMove, CFWL_MessageType::WindowWillMove) |
| -END_FWL_MESSAGE_DEF |
| +#define FWL_MESSAGE_DEF(classname, msgType, ...) \ |
| + class classname : public CFWL_Message { \ |
| + public: \ |
| + classname(); \ |
| + ~classname() override; \ |
| + CFWL_Message* Clone() override; \ |
| + FWL_Error GetClassName(CFX_WideString& wsClass) const override; \ |
| + CFWL_MessageType GetClassID() const override; \ |
| + __VA_ARGS__ \ |
| + }; // NOLINT |
| + |
| +#define FWL_MESSAGE_FUNCTION_DEF(classname, msgType, ...) \ |
|
dsinclair
2016/06/16 17:35:20
ditto, can they be combined?
Wei Li
2016/06/16 18:16:33
Maybe not, this is to give Macro user the flexibil
dsinclair
2016/06/16 18:21:13
Doh, missed the VA_ARGS used in both macros.
Wei Li
2016/06/17 18:11:18
Found a way to make this better. :) thanks.
|
| + inline classname::classname() {} \ |
| + inline classname::~classname() {} \ |
| + inline CFWL_Message* classname::Clone() { return new classname(*this); } \ |
| + inline FWL_Error classname::GetClassName(CFX_WideString& wsClass) const { \ |
| + wsClass = L## #classname; \ |
| + return FWL_Error::Succeeded; \ |
| + } \ |
| + inline CFWL_MessageType classname::GetClassID() const { return msgType; } \ |
| + __VA_ARGS__ |
| + |
| +FWL_MESSAGE_DEF(CFWL_MsgActivate, CFWL_MessageType::Activate) |
| +FWL_MESSAGE_FUNCTION_DEF(CFWL_MsgActivate, CFWL_MessageType::Activate) |
| + |
| +FWL_MESSAGE_DEF(CFWL_MsgDeactivate, CFWL_MessageType::Deactivate) |
| +FWL_MESSAGE_FUNCTION_DEF(CFWL_MsgDeactivate, CFWL_MessageType::Deactivate) |
| + |
| +FWL_MESSAGE_DEF(CFWL_MsgMouse, CFWL_MessageType::Mouse, FX_FLOAT m_fx; |
| + FX_FLOAT m_fy; |
| + uint32_t m_dwFlags; |
| + FWL_MouseCommand m_dwCmd;) |
| +FWL_MESSAGE_FUNCTION_DEF(CFWL_MsgMouse, CFWL_MessageType::Mouse) |
| + |
| +FWL_MESSAGE_DEF(CFWL_MsgMouseWheel, CFWL_MessageType::MouseWheel, FX_FLOAT m_fx; |
| + FX_FLOAT m_fy; |
| + FX_FLOAT m_fDeltaX; |
| + FX_FLOAT m_fDeltaY; |
| + uint32_t m_dwFlags;) |
| +FWL_MESSAGE_FUNCTION_DEF(CFWL_MsgMouseWheel, CFWL_MessageType::MouseWheel) |
| + |
| +FWL_MESSAGE_DEF(CFWL_MsgSetFocus, |
| + CFWL_MessageType::SetFocus, |
| + IFWL_Widget* m_pKillFocus;) |
| +FWL_MESSAGE_FUNCTION_DEF(CFWL_MsgSetFocus, CFWL_MessageType::SetFocus) |
| + |
| +FWL_MESSAGE_DEF(CFWL_MsgKillFocus, |
| + CFWL_MessageType::KillFocus, |
| + IFWL_Widget* m_pSetFocus;) |
| +FWL_MESSAGE_FUNCTION_DEF(CFWL_MsgKillFocus, CFWL_MessageType::KillFocus) |
| + |
| +FWL_MESSAGE_DEF(CFWL_MsgKey, CFWL_MessageType::Key, uint32_t m_dwKeyCode; |
| + uint32_t m_dwFlags; |
| + FWL_KeyCommand m_dwCmd;) |
| +FWL_MESSAGE_FUNCTION_DEF(CFWL_MsgKey, CFWL_MessageType::Key) |
| + |
| +FWL_MESSAGE_DEF(CFWL_MsgCursor, CFWL_MessageType::Cursor) |
| +FWL_MESSAGE_FUNCTION_DEF(CFWL_MsgCursor, CFWL_MessageType::Cursor) |
| + |
| +FWL_MESSAGE_DEF(CFWL_MsgSize, CFWL_MessageType::Size, int32_t m_iWidth; |
| + int32_t m_iHeight;) |
| +FWL_MESSAGE_FUNCTION_DEF(CFWL_MsgSize, CFWL_MessageType::Size) |
| + |
| +FWL_MESSAGE_DEF(CFWL_MsgWindowMove, CFWL_MessageType::WindowMove, FX_FLOAT m_fx; |
| + FX_FLOAT m_fy;) |
| +FWL_MESSAGE_FUNCTION_DEF(CFWL_MsgWindowMove, CFWL_MessageType::WindowMove) |
| + |
| +FWL_MESSAGE_DEF(CFWL_MsgDropFiles, |
| + CFWL_MessageType::DropFiles, |
| + CFWL_MsgDropFiles(const CFWL_MsgDropFiles& copy); |
| + FX_FLOAT m_fx; |
| + FX_FLOAT m_fy; |
| + CFX_WideStringArray m_files;) |
| +FWL_MESSAGE_FUNCTION_DEF( |
| + CFWL_MsgDropFiles, |
| + CFWL_MessageType::DropFiles, |
| + inline CFWL_MsgDropFiles::CFWL_MsgDropFiles(const CFWL_MsgDropFiles& copy) { |
| + m_pDstTarget = copy.m_pDstTarget; |
| + m_pSrcTarget = copy.m_pSrcTarget; |
| + m_fx = copy.m_fx; |
| + m_fy = copy.m_fy; |
| + m_files.Append(copy.m_files); |
| + }) |
| + |
| +FWL_MESSAGE_DEF(CFWL_MsgTaskClicked, |
| + CFWL_MessageType::TaskClicked, |
| + FX_FLOAT m_fx; |
| + FX_FLOAT m_fy;) |
| +FWL_MESSAGE_FUNCTION_DEF(CFWL_MsgTaskClicked, CFWL_MessageType::TaskClicked) |
| + |
| +FWL_MESSAGE_DEF(CFWL_MsgClose, CFWL_MessageType::Close) |
| +FWL_MESSAGE_FUNCTION_DEF(CFWL_MsgClose, CFWL_MessageType::Close) |
| + |
| +FWL_MESSAGE_DEF(CFWL_MsgWindowWillMove, CFWL_MessageType::WindowWillMove) |
| +FWL_MESSAGE_FUNCTION_DEF(CFWL_MsgWindowWillMove, |
| + CFWL_MessageType::WindowWillMove) |
| #endif // XFA_FWL_CORE_CFWL_MESSAGE_H_ |