| OLD | NEW |
| 1 // Copyright 2014 PDFium Authors. All rights reserved. | 1 // Copyright 2014 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 #include "xfa/fwl/core/fwl_noteimp.h" | 7 #include "xfa/fwl/core/fwl_noteimp.h" |
| 8 | 8 |
| 9 #include "core/fxcrt/fx_ext.h" | 9 #include "core/fxcrt/fx_ext.h" |
| 10 #include "third_party/base/stl_util.h" | 10 #include "third_party/base/stl_util.h" |
| 11 #include "xfa/fwl/core/cfwl_message.h" | 11 #include "xfa/fwl/core/cfwl_message.h" |
| 12 #include "xfa/fwl/core/cfwl_widgetmgr.h" | 12 #include "xfa/fwl/core/cfwl_widgetmgr.h" |
| 13 #include "xfa/fwl/core/ifwl_app.h" | 13 #include "xfa/fwl/core/ifwl_app.h" |
| 14 #include "xfa/fwl/core/ifwl_tooltip.h" | 14 #include "xfa/fwl/core/ifwl_tooltip.h" |
| 15 | 15 |
| 16 CFWL_NoteLoop::CFWL_NoteLoop(IFWL_Widget* pForm) | 16 CFWL_NoteLoop::CFWL_NoteLoop(IFWL_Widget* pForm) |
| 17 : m_pForm(pForm), m_bContinueModal(TRUE) {} | 17 : m_pForm(pForm), m_bContinueModal(true) {} |
| 18 | 18 |
| 19 FWL_Error CFWL_NoteLoop::Idle(int32_t count) { | 19 FWL_Error CFWL_NoteLoop::Idle(int32_t count) { |
| 20 #if (_FX_OS_ == _FX_WIN32_DESKTOP_) | 20 #if (_FX_OS_ == _FX_WIN32_DESKTOP_) |
| 21 if (count <= 0) { | 21 if (count <= 0) { |
| 22 #endif | 22 #endif |
| 23 CFWL_EvtIdle ev; | 23 CFWL_EvtIdle ev; |
| 24 const IFWL_App* pApp = m_pForm->GetOwnerApp(); | 24 const IFWL_App* pApp = m_pForm->GetOwnerApp(); |
| 25 if (!pApp) | 25 if (!pApp) |
| 26 return FWL_Error::Indefinite; | 26 return FWL_Error::Indefinite; |
| 27 | 27 |
| 28 CFWL_NoteDriver* pDriver = pApp->GetNoteDriver(); | 28 CFWL_NoteDriver* pDriver = pApp->GetNoteDriver(); |
| 29 if (!pDriver) | 29 if (!pDriver) |
| 30 return FWL_Error::Indefinite; | 30 return FWL_Error::Indefinite; |
| 31 | 31 |
| 32 pDriver->SendEvent(&ev); | 32 pDriver->SendEvent(&ev); |
| 33 #if (_FX_OS_ == _FX_WIN32_DESKTOP_) | 33 #if (_FX_OS_ == _FX_WIN32_DESKTOP_) |
| 34 } | 34 } |
| 35 #endif | 35 #endif |
| 36 return FWL_Error::Indefinite; | 36 return FWL_Error::Indefinite; |
| 37 } | 37 } |
| 38 IFWL_Widget* CFWL_NoteLoop::GetForm() { | 38 IFWL_Widget* CFWL_NoteLoop::GetForm() { |
| 39 return m_pForm; | 39 return m_pForm; |
| 40 } | 40 } |
| 41 FX_BOOL CFWL_NoteLoop::ContinueModal() { | 41 bool CFWL_NoteLoop::ContinueModal() { |
| 42 return m_bContinueModal; | 42 return m_bContinueModal; |
| 43 } | 43 } |
| 44 FWL_Error CFWL_NoteLoop::EndModalLoop() { | 44 FWL_Error CFWL_NoteLoop::EndModalLoop() { |
| 45 m_bContinueModal = FALSE; | 45 m_bContinueModal = false; |
| 46 return FWL_Error::Succeeded; | 46 return FWL_Error::Succeeded; |
| 47 } | 47 } |
| 48 | 48 |
| 49 FWL_Error CFWL_NoteLoop::SetMainForm(IFWL_Widget* pForm) { | 49 FWL_Error CFWL_NoteLoop::SetMainForm(IFWL_Widget* pForm) { |
| 50 m_pForm = pForm; | 50 m_pForm = pForm; |
| 51 return FWL_Error::Succeeded; | 51 return FWL_Error::Succeeded; |
| 52 } | 52 } |
| 53 void CFWL_NoteLoop::GenerateCommondEvent(uint32_t dwCommand) { | 53 void CFWL_NoteLoop::GenerateCommondEvent(uint32_t dwCommand) { |
| 54 CFWL_EvtMenuCommand ev; | 54 CFWL_EvtMenuCommand ev; |
| 55 ev.m_iCommand = dwCommand; | 55 ev.m_iCommand = dwCommand; |
| 56 const IFWL_App* pApp = m_pForm->GetOwnerApp(); | 56 const IFWL_App* pApp = m_pForm->GetOwnerApp(); |
| 57 if (!pApp) | 57 if (!pApp) |
| 58 return; | 58 return; |
| 59 | 59 |
| 60 CFWL_NoteDriver* pDriver = pApp->GetNoteDriver(); | 60 CFWL_NoteDriver* pDriver = pApp->GetNoteDriver(); |
| 61 if (!pDriver) | 61 if (!pDriver) |
| 62 return; | 62 return; |
| 63 | 63 |
| 64 pDriver->SendEvent(&ev); | 64 pDriver->SendEvent(&ev); |
| 65 } | 65 } |
| 66 CFWL_NoteDriver::CFWL_NoteDriver() | 66 CFWL_NoteDriver::CFWL_NoteDriver() |
| 67 : m_pHover(nullptr), | 67 : m_pHover(nullptr), |
| 68 m_pFocus(nullptr), | 68 m_pFocus(nullptr), |
| 69 m_pGrab(nullptr), | 69 m_pGrab(nullptr), |
| 70 m_pNoteLoop(new CFWL_NoteLoop) { | 70 m_pNoteLoop(new CFWL_NoteLoop) { |
| 71 PushNoteLoop(m_pNoteLoop.get()); | 71 PushNoteLoop(m_pNoteLoop.get()); |
| 72 } | 72 } |
| 73 CFWL_NoteDriver::~CFWL_NoteDriver() { | 73 CFWL_NoteDriver::~CFWL_NoteDriver() { |
| 74 ClearInvalidEventTargets(TRUE); | 74 ClearInvalidEventTargets(true); |
| 75 } | 75 } |
| 76 | 76 |
| 77 void CFWL_NoteDriver::SendEvent(CFWL_Event* pNote) { | 77 void CFWL_NoteDriver::SendEvent(CFWL_Event* pNote) { |
| 78 if (m_eventTargets.empty()) | 78 if (m_eventTargets.empty()) |
| 79 return; | 79 return; |
| 80 | 80 |
| 81 for (const auto& pair : m_eventTargets) { | 81 for (const auto& pair : m_eventTargets) { |
| 82 CFWL_EventTarget* pEventTarget = pair.second; | 82 CFWL_EventTarget* pEventTarget = pair.second; |
| 83 if (pEventTarget && !pEventTarget->IsInvalid()) | 83 if (pEventTarget && !pEventTarget->IsInvalid()) |
| 84 pEventTarget->ProcessEvent(pNote); | 84 pEventTarget->ProcessEvent(pNote); |
| (...skipping 22 matching lines...) Expand all Loading... |
| 107 if (key == 0) | 107 if (key == 0) |
| 108 return FWL_Error::Indefinite; | 108 return FWL_Error::Indefinite; |
| 109 | 109 |
| 110 auto it = m_eventTargets.find(key); | 110 auto it = m_eventTargets.find(key); |
| 111 if (it != m_eventTargets.end()) | 111 if (it != m_eventTargets.end()) |
| 112 it->second->FlagInvalid(); | 112 it->second->FlagInvalid(); |
| 113 | 113 |
| 114 return FWL_Error::Succeeded; | 114 return FWL_Error::Succeeded; |
| 115 } | 115 } |
| 116 | 116 |
| 117 void CFWL_NoteDriver::ClearEventTargets(FX_BOOL bRemoveAll) { | 117 void CFWL_NoteDriver::ClearEventTargets(bool bRemoveAll) { |
| 118 ClearInvalidEventTargets(bRemoveAll); | 118 ClearInvalidEventTargets(bRemoveAll); |
| 119 } | 119 } |
| 120 | 120 |
| 121 FWL_Error CFWL_NoteDriver::PushNoteLoop(CFWL_NoteLoop* pNoteLoop) { | 121 FWL_Error CFWL_NoteDriver::PushNoteLoop(CFWL_NoteLoop* pNoteLoop) { |
| 122 m_noteLoopQueue.Add(pNoteLoop); | 122 m_noteLoopQueue.Add(pNoteLoop); |
| 123 return FWL_Error::Succeeded; | 123 return FWL_Error::Succeeded; |
| 124 } | 124 } |
| 125 CFWL_NoteLoop* CFWL_NoteDriver::PopNoteLoop() { | 125 CFWL_NoteLoop* CFWL_NoteDriver::PopNoteLoop() { |
| 126 int32_t pos = m_noteLoopQueue.GetSize(); | 126 int32_t pos = m_noteLoopQueue.GetSize(); |
| 127 if (pos <= 0) | 127 if (pos <= 0) |
| 128 return nullptr; | 128 return nullptr; |
| 129 | 129 |
| 130 CFWL_NoteLoop* p = m_noteLoopQueue.GetAt(pos - 1); | 130 CFWL_NoteLoop* p = m_noteLoopQueue.GetAt(pos - 1); |
| 131 m_noteLoopQueue.RemoveAt(pos - 1); | 131 m_noteLoopQueue.RemoveAt(pos - 1); |
| 132 return p; | 132 return p; |
| 133 } | 133 } |
| 134 FX_BOOL CFWL_NoteDriver::SetFocus(IFWL_Widget* pFocus, FX_BOOL bNotify) { | 134 bool CFWL_NoteDriver::SetFocus(IFWL_Widget* pFocus, bool bNotify) { |
| 135 if (m_pFocus == pFocus) { | 135 if (m_pFocus == pFocus) { |
| 136 return TRUE; | 136 return true; |
| 137 } | 137 } |
| 138 IFWL_Widget* pPrev = m_pFocus; | 138 IFWL_Widget* pPrev = m_pFocus; |
| 139 m_pFocus = pFocus; | 139 m_pFocus = pFocus; |
| 140 if (pPrev) { | 140 if (pPrev) { |
| 141 CFWL_MsgKillFocus ms; | 141 CFWL_MsgKillFocus ms; |
| 142 ms.m_pDstTarget = pPrev; | 142 ms.m_pDstTarget = pPrev; |
| 143 ms.m_pSrcTarget = pPrev; | 143 ms.m_pSrcTarget = pPrev; |
| 144 if (bNotify) { | 144 if (bNotify) { |
| 145 ms.m_dwExtend = 1; | 145 ms.m_dwExtend = 1; |
| 146 } | 146 } |
| 147 if (IFWL_WidgetDelegate* pDelegate = pPrev->GetDelegate()) | 147 if (IFWL_WidgetDelegate* pDelegate = pPrev->GetDelegate()) |
| 148 pDelegate->OnProcessMessage(&ms); | 148 pDelegate->OnProcessMessage(&ms); |
| 149 } | 149 } |
| 150 if (pFocus) { | 150 if (pFocus) { |
| 151 IFWL_Widget* pWidget = | 151 IFWL_Widget* pWidget = |
| 152 pFocus->GetOwnerApp()->GetWidgetMgr()->GetSystemFormWidget(pFocus); | 152 pFocus->GetOwnerApp()->GetWidgetMgr()->GetSystemFormWidget(pFocus); |
| 153 IFWL_Form* pForm = static_cast<IFWL_Form*>(pWidget); | 153 IFWL_Form* pForm = static_cast<IFWL_Form*>(pWidget); |
| 154 if (pForm) | 154 if (pForm) |
| 155 pForm->SetSubFocus(pFocus); | 155 pForm->SetSubFocus(pFocus); |
| 156 | 156 |
| 157 CFWL_MsgSetFocus ms; | 157 CFWL_MsgSetFocus ms; |
| 158 ms.m_pDstTarget = pFocus; | 158 ms.m_pDstTarget = pFocus; |
| 159 if (bNotify) { | 159 if (bNotify) { |
| 160 ms.m_dwExtend = 1; | 160 ms.m_dwExtend = 1; |
| 161 } | 161 } |
| 162 | 162 |
| 163 if (IFWL_WidgetDelegate* pDelegate = pFocus->GetDelegate()) | 163 if (IFWL_WidgetDelegate* pDelegate = pFocus->GetDelegate()) |
| 164 pDelegate->OnProcessMessage(&ms); | 164 pDelegate->OnProcessMessage(&ms); |
| 165 } | 165 } |
| 166 return TRUE; | 166 return true; |
| 167 } | 167 } |
| 168 FWL_Error CFWL_NoteDriver::Run() { | 168 FWL_Error CFWL_NoteDriver::Run() { |
| 169 #if (_FX_OS_ == _FX_LINUX_DESKTOP_ || _FX_OS_ == _FX_WIN32_DESKTOP_ || \ | 169 #if (_FX_OS_ == _FX_LINUX_DESKTOP_ || _FX_OS_ == _FX_WIN32_DESKTOP_ || \ |
| 170 _FX_OS_ == _FX_WIN64_) | 170 _FX_OS_ == _FX_WIN64_) |
| 171 CFWL_NoteLoop* pTopLoop = nullptr; | 171 CFWL_NoteLoop* pTopLoop = nullptr; |
| 172 for (;;) { | 172 for (;;) { |
| 173 pTopLoop = GetTopLoop(); | 173 pTopLoop = GetTopLoop(); |
| 174 if (!pTopLoop || !pTopLoop->ContinueModal()) | 174 if (!pTopLoop || !pTopLoop->ContinueModal()) |
| 175 break; | 175 break; |
| 176 if (UnqueueMessage(pTopLoop)) | 176 if (UnqueueMessage(pTopLoop)) |
| 177 continue; | 177 continue; |
| 178 } | 178 } |
| 179 #endif | 179 #endif |
| 180 | 180 |
| 181 return FWL_Error::Succeeded; | 181 return FWL_Error::Succeeded; |
| 182 } | 182 } |
| 183 | 183 |
| 184 IFWL_Widget* CFWL_NoteDriver::GetFocus() { | 184 IFWL_Widget* CFWL_NoteDriver::GetFocus() { |
| 185 return m_pFocus; | 185 return m_pFocus; |
| 186 } | 186 } |
| 187 IFWL_Widget* CFWL_NoteDriver::GetHover() { | 187 IFWL_Widget* CFWL_NoteDriver::GetHover() { |
| 188 return m_pHover; | 188 return m_pHover; |
| 189 } | 189 } |
| 190 void CFWL_NoteDriver::SetHover(IFWL_Widget* pHover) { | 190 void CFWL_NoteDriver::SetHover(IFWL_Widget* pHover) { |
| 191 m_pHover = pHover; | 191 m_pHover = pHover; |
| 192 } | 192 } |
| 193 void CFWL_NoteDriver::SetGrab(IFWL_Widget* pGrab, FX_BOOL bSet) { | 193 void CFWL_NoteDriver::SetGrab(IFWL_Widget* pGrab, bool bSet) { |
| 194 m_pGrab = bSet ? pGrab : nullptr; | 194 m_pGrab = bSet ? pGrab : nullptr; |
| 195 } | 195 } |
| 196 void CFWL_NoteDriver::NotifyTargetHide(IFWL_Widget* pNoteTarget) { | 196 void CFWL_NoteDriver::NotifyTargetHide(IFWL_Widget* pNoteTarget) { |
| 197 if (m_pFocus == pNoteTarget) { | 197 if (m_pFocus == pNoteTarget) { |
| 198 m_pFocus = nullptr; | 198 m_pFocus = nullptr; |
| 199 } | 199 } |
| 200 if (m_pHover == pNoteTarget) { | 200 if (m_pHover == pNoteTarget) { |
| 201 m_pHover = nullptr; | 201 m_pHover = nullptr; |
| 202 } | 202 } |
| 203 if (m_pGrab == pNoteTarget) { | 203 if (m_pGrab == pNoteTarget) { |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 249 FWL_Error CFWL_NoteDriver::UnRegisterForm(IFWL_Widget* pForm) { | 249 FWL_Error CFWL_NoteDriver::UnRegisterForm(IFWL_Widget* pForm) { |
| 250 if (!pForm) | 250 if (!pForm) |
| 251 return FWL_Error::Indefinite; | 251 return FWL_Error::Indefinite; |
| 252 int32_t nIndex = m_forms.Find(pForm); | 252 int32_t nIndex = m_forms.Find(pForm); |
| 253 if (nIndex < 0) { | 253 if (nIndex < 0) { |
| 254 return FWL_Error::Indefinite; | 254 return FWL_Error::Indefinite; |
| 255 } | 255 } |
| 256 m_forms.RemoveAt(nIndex); | 256 m_forms.RemoveAt(nIndex); |
| 257 return FWL_Error::Succeeded; | 257 return FWL_Error::Succeeded; |
| 258 } | 258 } |
| 259 FX_BOOL CFWL_NoteDriver::QueueMessage(CFWL_Message* pMessage) { | 259 bool CFWL_NoteDriver::QueueMessage(CFWL_Message* pMessage) { |
| 260 pMessage->Retain(); | 260 pMessage->Retain(); |
| 261 m_noteQueue.Add(pMessage); | 261 m_noteQueue.Add(pMessage); |
| 262 return TRUE; | 262 return true; |
| 263 } | 263 } |
| 264 FX_BOOL CFWL_NoteDriver::UnqueueMessage(CFWL_NoteLoop* pNoteLoop) { | 264 bool CFWL_NoteDriver::UnqueueMessage(CFWL_NoteLoop* pNoteLoop) { |
| 265 if (m_noteQueue.GetSize() < 1) { | 265 if (m_noteQueue.GetSize() < 1) { |
| 266 return FALSE; | 266 return false; |
| 267 } | 267 } |
| 268 CFWL_Message* pMessage = m_noteQueue[0]; | 268 CFWL_Message* pMessage = m_noteQueue[0]; |
| 269 m_noteQueue.RemoveAt(0); | 269 m_noteQueue.RemoveAt(0); |
| 270 if (!IsValidMessage(pMessage)) { | 270 if (!IsValidMessage(pMessage)) { |
| 271 pMessage->Release(); | 271 pMessage->Release(); |
| 272 return TRUE; | 272 return true; |
| 273 } | 273 } |
| 274 ProcessMessage(pMessage); | 274 ProcessMessage(pMessage); |
| 275 | 275 |
| 276 pMessage->Release(); | 276 pMessage->Release(); |
| 277 return TRUE; | 277 return true; |
| 278 } | 278 } |
| 279 CFWL_NoteLoop* CFWL_NoteDriver::GetTopLoop() { | 279 CFWL_NoteLoop* CFWL_NoteDriver::GetTopLoop() { |
| 280 int32_t size = m_noteLoopQueue.GetSize(); | 280 int32_t size = m_noteLoopQueue.GetSize(); |
| 281 if (size <= 0) | 281 if (size <= 0) |
| 282 return nullptr; | 282 return nullptr; |
| 283 return static_cast<CFWL_NoteLoop*>(m_noteLoopQueue[size - 1]); | 283 return static_cast<CFWL_NoteLoop*>(m_noteLoopQueue[size - 1]); |
| 284 } | 284 } |
| 285 int32_t CFWL_NoteDriver::CountLoop() { | 285 int32_t CFWL_NoteDriver::CountLoop() { |
| 286 return m_noteLoopQueue.GetSize(); | 286 return m_noteLoopQueue.GetSize(); |
| 287 } | 287 } |
| 288 | 288 |
| 289 FX_BOOL CFWL_NoteDriver::ProcessMessage(CFWL_Message* pMessage) { | 289 bool CFWL_NoteDriver::ProcessMessage(CFWL_Message* pMessage) { |
| 290 CFWL_WidgetMgr* pWidgetMgr = | 290 CFWL_WidgetMgr* pWidgetMgr = |
| 291 pMessage->m_pDstTarget->GetOwnerApp()->GetWidgetMgr(); | 291 pMessage->m_pDstTarget->GetOwnerApp()->GetWidgetMgr(); |
| 292 IFWL_Widget* pMessageForm = pWidgetMgr->IsFormDisabled() | 292 IFWL_Widget* pMessageForm = pWidgetMgr->IsFormDisabled() |
| 293 ? pMessage->m_pDstTarget | 293 ? pMessage->m_pDstTarget |
| 294 : GetMessageForm(pMessage->m_pDstTarget); | 294 : GetMessageForm(pMessage->m_pDstTarget); |
| 295 if (!pMessageForm) | 295 if (!pMessageForm) |
| 296 return FALSE; | 296 return false; |
| 297 if (DispatchMessage(pMessage, pMessageForm)) { | 297 if (DispatchMessage(pMessage, pMessageForm)) { |
| 298 if (pMessage->GetClassID() == CFWL_MessageType::Mouse) | 298 if (pMessage->GetClassID() == CFWL_MessageType::Mouse) |
| 299 MouseSecondary(static_cast<CFWL_MsgMouse*>(pMessage)); | 299 MouseSecondary(static_cast<CFWL_MsgMouse*>(pMessage)); |
| 300 return TRUE; | 300 return true; |
| 301 } | 301 } |
| 302 return FALSE; | 302 return false; |
| 303 } | 303 } |
| 304 | 304 |
| 305 FX_BOOL CFWL_NoteDriver::DispatchMessage(CFWL_Message* pMessage, | 305 bool CFWL_NoteDriver::DispatchMessage(CFWL_Message* pMessage, |
| 306 IFWL_Widget* pMessageForm) { | 306 IFWL_Widget* pMessageForm) { |
| 307 FX_BOOL bRet = FALSE; | 307 bool bRet = false; |
| 308 switch (pMessage->GetClassID()) { | 308 switch (pMessage->GetClassID()) { |
| 309 case CFWL_MessageType::Activate: { | 309 case CFWL_MessageType::Activate: { |
| 310 bRet = DoActivate(static_cast<CFWL_MsgActivate*>(pMessage), pMessageForm); | 310 bRet = DoActivate(static_cast<CFWL_MsgActivate*>(pMessage), pMessageForm); |
| 311 break; | 311 break; |
| 312 } | 312 } |
| 313 case CFWL_MessageType::Deactivate: { | 313 case CFWL_MessageType::Deactivate: { |
| 314 bRet = DoDeactivate(static_cast<CFWL_MsgDeactivate*>(pMessage), | 314 bRet = DoDeactivate(static_cast<CFWL_MsgDeactivate*>(pMessage), |
| 315 pMessageForm); | 315 pMessageForm); |
| 316 break; | 316 break; |
| 317 } | 317 } |
| (...skipping 16 matching lines...) Expand all Loading... |
| 334 } | 334 } |
| 335 case CFWL_MessageType::MouseWheel: { | 335 case CFWL_MessageType::MouseWheel: { |
| 336 bRet = DoWheel(static_cast<CFWL_MsgMouseWheel*>(pMessage), pMessageForm); | 336 bRet = DoWheel(static_cast<CFWL_MsgMouseWheel*>(pMessage), pMessageForm); |
| 337 break; | 337 break; |
| 338 } | 338 } |
| 339 case CFWL_MessageType::Size: { | 339 case CFWL_MessageType::Size: { |
| 340 bRet = DoSize(static_cast<CFWL_MsgSize*>(pMessage)); | 340 bRet = DoSize(static_cast<CFWL_MsgSize*>(pMessage)); |
| 341 break; | 341 break; |
| 342 } | 342 } |
| 343 case CFWL_MessageType::Cursor: { | 343 case CFWL_MessageType::Cursor: { |
| 344 bRet = TRUE; | 344 bRet = true; |
| 345 break; | 345 break; |
| 346 } | 346 } |
| 347 case CFWL_MessageType::WindowMove: { | 347 case CFWL_MessageType::WindowMove: { |
| 348 bRet = DoWindowMove(static_cast<CFWL_MsgWindowMove*>(pMessage), | 348 bRet = DoWindowMove(static_cast<CFWL_MsgWindowMove*>(pMessage), |
| 349 pMessageForm); | 349 pMessageForm); |
| 350 break; | 350 break; |
| 351 } | 351 } |
| 352 case CFWL_MessageType::DropFiles: { | 352 case CFWL_MessageType::DropFiles: { |
| 353 bRet = | 353 bRet = |
| 354 DoDragFiles(static_cast<CFWL_MsgDropFiles*>(pMessage), pMessageForm); | 354 DoDragFiles(static_cast<CFWL_MsgDropFiles*>(pMessage), pMessageForm); |
| 355 break; | 355 break; |
| 356 } | 356 } |
| 357 default: { | 357 default: { |
| 358 bRet = TRUE; | 358 bRet = true; |
| 359 break; | 359 break; |
| 360 } | 360 } |
| 361 } | 361 } |
| 362 if (bRet) { | 362 if (bRet) { |
| 363 if (IFWL_WidgetDelegate* pDelegate = | 363 if (IFWL_WidgetDelegate* pDelegate = |
| 364 pMessage->m_pDstTarget->GetDelegate()) { | 364 pMessage->m_pDstTarget->GetDelegate()) { |
| 365 pDelegate->OnProcessMessage(pMessage); | 365 pDelegate->OnProcessMessage(pMessage); |
| 366 } | 366 } |
| 367 } | 367 } |
| 368 return bRet; | 368 return bRet; |
| 369 } | 369 } |
| 370 | 370 |
| 371 FX_BOOL CFWL_NoteDriver::DoActivate(CFWL_MsgActivate* pMsg, | 371 bool CFWL_NoteDriver::DoActivate(CFWL_MsgActivate* pMsg, |
| 372 IFWL_Widget* pMessageForm) { | 372 IFWL_Widget* pMessageForm) { |
| 373 pMsg->m_pDstTarget = pMessageForm; | 373 pMsg->m_pDstTarget = pMessageForm; |
| 374 return !!(pMsg->m_pDstTarget->GetStates() & FWL_WGTSTATE_Deactivated); | 374 return !!(pMsg->m_pDstTarget->GetStates() & FWL_WGTSTATE_Deactivated); |
| 375 } | 375 } |
| 376 | 376 |
| 377 FX_BOOL CFWL_NoteDriver::DoDeactivate(CFWL_MsgDeactivate* pMsg, | 377 bool CFWL_NoteDriver::DoDeactivate(CFWL_MsgDeactivate* pMsg, |
| 378 IFWL_Widget* pMessageForm) { | 378 IFWL_Widget* pMessageForm) { |
| 379 int32_t iTrackLoop = m_noteLoopQueue.GetSize(); | 379 int32_t iTrackLoop = m_noteLoopQueue.GetSize(); |
| 380 if (iTrackLoop <= 0) | 380 if (iTrackLoop <= 0) |
| 381 return FALSE; | 381 return false; |
| 382 if (iTrackLoop == 1) { | 382 if (iTrackLoop == 1) { |
| 383 if (pMessageForm->IsInstance(FX_WSTRC(L"FWL_FORMPROXY"))) { | 383 if (pMessageForm->IsInstance(FX_WSTRC(L"FWL_FORMPROXY"))) { |
| 384 return FALSE; | 384 return false; |
| 385 } | 385 } |
| 386 if (pMsg->m_pSrcTarget && | 386 if (pMsg->m_pSrcTarget && |
| 387 pMsg->m_pSrcTarget->IsInstance(FX_WSTRC(L"FWL_FORMPROXY"))) { | 387 pMsg->m_pSrcTarget->IsInstance(FX_WSTRC(L"FWL_FORMPROXY"))) { |
| 388 return FALSE; | 388 return false; |
| 389 } | 389 } |
| 390 if (pMsg->m_pSrcTarget && | 390 if (pMsg->m_pSrcTarget && |
| 391 pMsg->m_pSrcTarget->GetClassID() == FWL_Type::ToolTip) { | 391 pMsg->m_pSrcTarget->GetClassID() == FWL_Type::ToolTip) { |
| 392 return FALSE; | 392 return false; |
| 393 } | 393 } |
| 394 return TRUE; | 394 return true; |
| 395 } | 395 } |
| 396 IFWL_Widget* pDst = pMsg->m_pDstTarget; | 396 IFWL_Widget* pDst = pMsg->m_pDstTarget; |
| 397 if (!pDst) | 397 if (!pDst) |
| 398 return FALSE; | 398 return false; |
| 399 #if (_FX_OS_ == _FX_MACOSX_) | 399 #if (_FX_OS_ == _FX_MACOSX_) |
| 400 if (pDst == pMessageForm && pDst->IsInstance(L"FWL_FORMPROXY")) { | 400 if (pDst == pMessageForm && pDst->IsInstance(L"FWL_FORMPROXY")) { |
| 401 return TRUE; | 401 return true; |
| 402 } | 402 } |
| 403 #endif | 403 #endif |
| 404 return pDst != pMessageForm && | 404 return pDst != pMessageForm && |
| 405 !pDst->IsInstance(FX_WSTRC(L"FWL_FORMPROXY")) && | 405 !pDst->IsInstance(FX_WSTRC(L"FWL_FORMPROXY")) && |
| 406 !pMessageForm->IsInstance(FX_WSTRC(L"FWL_FORMPROXY")); | 406 !pMessageForm->IsInstance(FX_WSTRC(L"FWL_FORMPROXY")); |
| 407 } | 407 } |
| 408 FX_BOOL CFWL_NoteDriver::DoSetFocus(CFWL_MsgSetFocus* pMsg, | 408 bool CFWL_NoteDriver::DoSetFocus(CFWL_MsgSetFocus* pMsg, |
| 409 IFWL_Widget* pMessageForm) { | 409 IFWL_Widget* pMessageForm) { |
| 410 CFWL_WidgetMgr* pWidgetMgr = pMessageForm->GetOwnerApp()->GetWidgetMgr(); | 410 CFWL_WidgetMgr* pWidgetMgr = pMessageForm->GetOwnerApp()->GetWidgetMgr(); |
| 411 if (pWidgetMgr->IsFormDisabled()) { | 411 if (pWidgetMgr->IsFormDisabled()) { |
| 412 m_pFocus = pMsg->m_pDstTarget; | 412 m_pFocus = pMsg->m_pDstTarget; |
| 413 return TRUE; | 413 return true; |
| 414 } | 414 } |
| 415 IFWL_Widget* pWidget = pMsg->m_pDstTarget; | 415 IFWL_Widget* pWidget = pMsg->m_pDstTarget; |
| 416 if (pWidget) { | 416 if (pWidget) { |
| 417 IFWL_Form* pForm = static_cast<IFWL_Form*>(pWidget); | 417 IFWL_Form* pForm = static_cast<IFWL_Form*>(pWidget); |
| 418 IFWL_Widget* pSubFocus = pForm->GetSubFocus(); | 418 IFWL_Widget* pSubFocus = pForm->GetSubFocus(); |
| 419 if (pSubFocus && ((pSubFocus->GetStates() & FWL_WGTSTATE_Focused) == 0)) { | 419 if (pSubFocus && ((pSubFocus->GetStates() & FWL_WGTSTATE_Focused) == 0)) { |
| 420 pMsg->m_pDstTarget = pSubFocus; | 420 pMsg->m_pDstTarget = pSubFocus; |
| 421 if (m_pFocus != pMsg->m_pDstTarget) { | 421 if (m_pFocus != pMsg->m_pDstTarget) { |
| 422 m_pFocus = pMsg->m_pDstTarget; | 422 m_pFocus = pMsg->m_pDstTarget; |
| 423 return TRUE; | 423 return true; |
| 424 } | 424 } |
| 425 } | 425 } |
| 426 } | 426 } |
| 427 return FALSE; | 427 return false; |
| 428 } | 428 } |
| 429 FX_BOOL CFWL_NoteDriver::DoKillFocus(CFWL_MsgKillFocus* pMsg, | 429 bool CFWL_NoteDriver::DoKillFocus(CFWL_MsgKillFocus* pMsg, |
| 430 IFWL_Widget* pMessageForm) { | 430 IFWL_Widget* pMessageForm) { |
| 431 CFWL_WidgetMgr* pWidgetMgr = pMessageForm->GetOwnerApp()->GetWidgetMgr(); | 431 CFWL_WidgetMgr* pWidgetMgr = pMessageForm->GetOwnerApp()->GetWidgetMgr(); |
| 432 if (pWidgetMgr->IsFormDisabled()) { | 432 if (pWidgetMgr->IsFormDisabled()) { |
| 433 if (m_pFocus == pMsg->m_pDstTarget) { | 433 if (m_pFocus == pMsg->m_pDstTarget) { |
| 434 m_pFocus = nullptr; | 434 m_pFocus = nullptr; |
| 435 } | 435 } |
| 436 return TRUE; | 436 return true; |
| 437 } | 437 } |
| 438 IFWL_Form* pForm = static_cast<IFWL_Form*>(pMsg->m_pDstTarget); | 438 IFWL_Form* pForm = static_cast<IFWL_Form*>(pMsg->m_pDstTarget); |
| 439 if (pForm) { | 439 if (pForm) { |
| 440 IFWL_Widget* pSubFocus = pForm->GetSubFocus(); | 440 IFWL_Widget* pSubFocus = pForm->GetSubFocus(); |
| 441 if (pSubFocus && (pSubFocus->GetStates() & FWL_WGTSTATE_Focused)) { | 441 if (pSubFocus && (pSubFocus->GetStates() & FWL_WGTSTATE_Focused)) { |
| 442 pMsg->m_pDstTarget = pSubFocus; | 442 pMsg->m_pDstTarget = pSubFocus; |
| 443 if (m_pFocus == pMsg->m_pDstTarget) { | 443 if (m_pFocus == pMsg->m_pDstTarget) { |
| 444 m_pFocus = nullptr; | 444 m_pFocus = nullptr; |
| 445 return TRUE; | 445 return true; |
| 446 } | 446 } |
| 447 } | 447 } |
| 448 } | 448 } |
| 449 return FALSE; | 449 return false; |
| 450 } | 450 } |
| 451 FX_BOOL CFWL_NoteDriver::DoKey(CFWL_MsgKey* pMsg, IFWL_Widget* pMessageForm) { | 451 bool CFWL_NoteDriver::DoKey(CFWL_MsgKey* pMsg, IFWL_Widget* pMessageForm) { |
| 452 #if (_FX_OS_ != _FX_MACOSX_) | 452 #if (_FX_OS_ != _FX_MACOSX_) |
| 453 if (pMsg->m_dwCmd == FWL_KeyCommand::KeyDown && | 453 if (pMsg->m_dwCmd == FWL_KeyCommand::KeyDown && |
| 454 pMsg->m_dwKeyCode == FWL_VKEY_Tab) { | 454 pMsg->m_dwKeyCode == FWL_VKEY_Tab) { |
| 455 CFWL_WidgetMgr* pWidgetMgr = pMessageForm->GetOwnerApp()->GetWidgetMgr(); | 455 CFWL_WidgetMgr* pWidgetMgr = pMessageForm->GetOwnerApp()->GetWidgetMgr(); |
| 456 IFWL_Widget* pForm = GetMessageForm(pMsg->m_pDstTarget); | 456 IFWL_Widget* pForm = GetMessageForm(pMsg->m_pDstTarget); |
| 457 IFWL_Widget* pFocus = m_pFocus; | 457 IFWL_Widget* pFocus = m_pFocus; |
| 458 if (m_pFocus) { | 458 if (m_pFocus) { |
| 459 if (pWidgetMgr->GetSystemFormWidget(m_pFocus) != pForm) | 459 if (pWidgetMgr->GetSystemFormWidget(m_pFocus) != pForm) |
| 460 pFocus = nullptr; | 460 pFocus = nullptr; |
| 461 } | 461 } |
| 462 FX_BOOL bFind = FALSE; | 462 bool bFind = false; |
| 463 IFWL_Widget* pNextTabStop = pWidgetMgr->nextTab(pForm, pFocus, bFind); | 463 IFWL_Widget* pNextTabStop = pWidgetMgr->nextTab(pForm, pFocus, bFind); |
| 464 if (!pNextTabStop) { | 464 if (!pNextTabStop) { |
| 465 bFind = FALSE; | 465 bFind = false; |
| 466 pNextTabStop = pWidgetMgr->nextTab(pForm, nullptr, bFind); | 466 pNextTabStop = pWidgetMgr->nextTab(pForm, nullptr, bFind); |
| 467 } | 467 } |
| 468 if (pNextTabStop == pFocus) { | 468 if (pNextTabStop == pFocus) { |
| 469 return TRUE; | 469 return true; |
| 470 } | 470 } |
| 471 if (pNextTabStop) { | 471 if (pNextTabStop) { |
| 472 SetFocus(pNextTabStop); | 472 SetFocus(pNextTabStop); |
| 473 } | 473 } |
| 474 return TRUE; | 474 return true; |
| 475 } | 475 } |
| 476 #endif | 476 #endif |
| 477 if (!m_pFocus) { | 477 if (!m_pFocus) { |
| 478 if (pMsg->m_dwCmd == FWL_KeyCommand::KeyDown && | 478 if (pMsg->m_dwCmd == FWL_KeyCommand::KeyDown && |
| 479 pMsg->m_dwKeyCode == FWL_VKEY_Return) { | 479 pMsg->m_dwKeyCode == FWL_VKEY_Return) { |
| 480 CFWL_WidgetMgr* pWidgetMgr = pMessageForm->GetOwnerApp()->GetWidgetMgr(); | 480 CFWL_WidgetMgr* pWidgetMgr = pMessageForm->GetOwnerApp()->GetWidgetMgr(); |
| 481 IFWL_Widget* defButton = pWidgetMgr->GetDefaultButton(pMessageForm); | 481 IFWL_Widget* defButton = pWidgetMgr->GetDefaultButton(pMessageForm); |
| 482 if (defButton) { | 482 if (defButton) { |
| 483 pMsg->m_pDstTarget = defButton; | 483 pMsg->m_pDstTarget = defButton; |
| 484 return TRUE; | 484 return true; |
| 485 } | 485 } |
| 486 } | 486 } |
| 487 return FALSE; | 487 return false; |
| 488 } | 488 } |
| 489 pMsg->m_pDstTarget = m_pFocus; | 489 pMsg->m_pDstTarget = m_pFocus; |
| 490 return TRUE; | 490 return true; |
| 491 } | 491 } |
| 492 FX_BOOL CFWL_NoteDriver::DoMouse(CFWL_MsgMouse* pMsg, | 492 bool CFWL_NoteDriver::DoMouse(CFWL_MsgMouse* pMsg, IFWL_Widget* pMessageForm) { |
| 493 IFWL_Widget* pMessageForm) { | |
| 494 if (pMsg->m_dwCmd == FWL_MouseCommand::Leave || | 493 if (pMsg->m_dwCmd == FWL_MouseCommand::Leave || |
| 495 pMsg->m_dwCmd == FWL_MouseCommand::Hover || | 494 pMsg->m_dwCmd == FWL_MouseCommand::Hover || |
| 496 pMsg->m_dwCmd == FWL_MouseCommand::Enter) { | 495 pMsg->m_dwCmd == FWL_MouseCommand::Enter) { |
| 497 return !!pMsg->m_pDstTarget; | 496 return !!pMsg->m_pDstTarget; |
| 498 } | 497 } |
| 499 if (pMsg->m_pDstTarget != pMessageForm) { | 498 if (pMsg->m_pDstTarget != pMessageForm) { |
| 500 pMsg->m_pDstTarget->TransformTo(pMessageForm, pMsg->m_fx, pMsg->m_fy); | 499 pMsg->m_pDstTarget->TransformTo(pMessageForm, pMsg->m_fx, pMsg->m_fy); |
| 501 } | 500 } |
| 502 if (!DoMouseEx(pMsg, pMessageForm)) { | 501 if (!DoMouseEx(pMsg, pMessageForm)) { |
| 503 pMsg->m_pDstTarget = pMessageForm; | 502 pMsg->m_pDstTarget = pMessageForm; |
| 504 } | 503 } |
| 505 return TRUE; | 504 return true; |
| 506 } | 505 } |
| 507 FX_BOOL CFWL_NoteDriver::DoWheel(CFWL_MsgMouseWheel* pMsg, | 506 bool CFWL_NoteDriver::DoWheel(CFWL_MsgMouseWheel* pMsg, |
| 508 IFWL_Widget* pMessageForm) { | 507 IFWL_Widget* pMessageForm) { |
| 509 CFWL_WidgetMgr* pWidgetMgr = pMessageForm->GetOwnerApp()->GetWidgetMgr(); | 508 CFWL_WidgetMgr* pWidgetMgr = pMessageForm->GetOwnerApp()->GetWidgetMgr(); |
| 510 if (!pWidgetMgr) | 509 if (!pWidgetMgr) |
| 511 return FALSE; | 510 return false; |
| 512 | 511 |
| 513 IFWL_Widget* pDst = | 512 IFWL_Widget* pDst = |
| 514 pWidgetMgr->GetWidgetAtPoint(pMessageForm, pMsg->m_fx, pMsg->m_fy); | 513 pWidgetMgr->GetWidgetAtPoint(pMessageForm, pMsg->m_fx, pMsg->m_fy); |
| 515 if (!pDst) | 514 if (!pDst) |
| 516 return FALSE; | 515 return false; |
| 517 | 516 |
| 518 pMessageForm->TransformTo(pDst, pMsg->m_fx, pMsg->m_fy); | 517 pMessageForm->TransformTo(pDst, pMsg->m_fx, pMsg->m_fy); |
| 519 pMsg->m_pDstTarget = pDst; | 518 pMsg->m_pDstTarget = pDst; |
| 520 return TRUE; | 519 return true; |
| 521 } | 520 } |
| 522 FX_BOOL CFWL_NoteDriver::DoSize(CFWL_MsgSize* pMsg) { | 521 bool CFWL_NoteDriver::DoSize(CFWL_MsgSize* pMsg) { |
| 523 CFWL_WidgetMgr* pWidgetMgr = | 522 CFWL_WidgetMgr* pWidgetMgr = |
| 524 pMsg->m_pDstTarget->GetOwnerApp()->GetWidgetMgr(); | 523 pMsg->m_pDstTarget->GetOwnerApp()->GetWidgetMgr(); |
| 525 if (!pWidgetMgr) | 524 if (!pWidgetMgr) |
| 526 return FALSE; | 525 return false; |
| 527 pWidgetMgr->NotifySizeChanged(pMsg->m_pDstTarget, (FX_FLOAT)pMsg->m_iWidth, | 526 pWidgetMgr->NotifySizeChanged(pMsg->m_pDstTarget, (FX_FLOAT)pMsg->m_iWidth, |
| 528 (FX_FLOAT)pMsg->m_iHeight); | 527 (FX_FLOAT)pMsg->m_iHeight); |
| 529 return TRUE; | 528 return true; |
| 530 } | 529 } |
| 531 FX_BOOL CFWL_NoteDriver::DoWindowMove(CFWL_MsgWindowMove* pMsg, | 530 bool CFWL_NoteDriver::DoWindowMove(CFWL_MsgWindowMove* pMsg, |
| 532 IFWL_Widget* pMessageForm) { | 531 IFWL_Widget* pMessageForm) { |
| 533 return pMsg->m_pDstTarget == pMessageForm; | 532 return pMsg->m_pDstTarget == pMessageForm; |
| 534 } | 533 } |
| 535 FX_BOOL CFWL_NoteDriver::DoDragFiles(CFWL_MsgDropFiles* pMsg, | 534 bool CFWL_NoteDriver::DoDragFiles(CFWL_MsgDropFiles* pMsg, |
| 536 IFWL_Widget* pMessageForm) { | 535 IFWL_Widget* pMessageForm) { |
| 537 return pMsg->m_pDstTarget == pMessageForm; | 536 return pMsg->m_pDstTarget == pMessageForm; |
| 538 } | 537 } |
| 539 FX_BOOL CFWL_NoteDriver::DoMouseEx(CFWL_MsgMouse* pMsg, | 538 bool CFWL_NoteDriver::DoMouseEx(CFWL_MsgMouse* pMsg, |
| 540 IFWL_Widget* pMessageForm) { | 539 IFWL_Widget* pMessageForm) { |
| 541 CFWL_WidgetMgr* pWidgetMgr = pMessageForm->GetOwnerApp()->GetWidgetMgr(); | 540 CFWL_WidgetMgr* pWidgetMgr = pMessageForm->GetOwnerApp()->GetWidgetMgr(); |
| 542 if (!pWidgetMgr) | 541 if (!pWidgetMgr) |
| 543 return FALSE; | 542 return false; |
| 544 IFWL_Widget* pTarget = nullptr; | 543 IFWL_Widget* pTarget = nullptr; |
| 545 if (m_pGrab) | 544 if (m_pGrab) |
| 546 pTarget = m_pGrab; | 545 pTarget = m_pGrab; |
| 547 if (!pTarget) { | 546 if (!pTarget) { |
| 548 pTarget = | 547 pTarget = |
| 549 pWidgetMgr->GetWidgetAtPoint(pMessageForm, pMsg->m_fx, pMsg->m_fy); | 548 pWidgetMgr->GetWidgetAtPoint(pMessageForm, pMsg->m_fx, pMsg->m_fy); |
| 550 } | 549 } |
| 551 if (pTarget) { | 550 if (pTarget) { |
| 552 if (pMessageForm != pTarget) { | 551 if (pMessageForm != pTarget) { |
| 553 pMessageForm->TransformTo(pTarget, pMsg->m_fx, pMsg->m_fy); | 552 pMessageForm->TransformTo(pTarget, pMsg->m_fx, pMsg->m_fy); |
| 554 } | 553 } |
| 555 } | 554 } |
| 556 if (!pTarget) | 555 if (!pTarget) |
| 557 return FALSE; | 556 return false; |
| 558 pMsg->m_pDstTarget = pTarget; | 557 pMsg->m_pDstTarget = pTarget; |
| 559 return TRUE; | 558 return true; |
| 560 } | 559 } |
| 561 void CFWL_NoteDriver::MouseSecondary(CFWL_MsgMouse* pMsg) { | 560 void CFWL_NoteDriver::MouseSecondary(CFWL_MsgMouse* pMsg) { |
| 562 IFWL_Widget* pTarget = pMsg->m_pDstTarget; | 561 IFWL_Widget* pTarget = pMsg->m_pDstTarget; |
| 563 if (pTarget == m_pHover) { | 562 if (pTarget == m_pHover) { |
| 564 return; | 563 return; |
| 565 } | 564 } |
| 566 if (m_pHover) { | 565 if (m_pHover) { |
| 567 CFWL_MsgMouse msLeave; | 566 CFWL_MsgMouse msLeave; |
| 568 msLeave.m_pDstTarget = m_pHover; | 567 msLeave.m_pDstTarget = m_pHover; |
| 569 msLeave.m_fx = pMsg->m_fx; | 568 msLeave.m_fx = pMsg->m_fx; |
| 570 msLeave.m_fy = pMsg->m_fy; | 569 msLeave.m_fy = pMsg->m_fy; |
| 571 pTarget->TransformTo(m_pHover, msLeave.m_fx, msLeave.m_fy); | 570 pTarget->TransformTo(m_pHover, msLeave.m_fx, msLeave.m_fy); |
| 572 msLeave.m_dwFlags = 0; | 571 msLeave.m_dwFlags = 0; |
| 573 msLeave.m_dwCmd = FWL_MouseCommand::Leave; | 572 msLeave.m_dwCmd = FWL_MouseCommand::Leave; |
| 574 DispatchMessage(&msLeave, nullptr); | 573 DispatchMessage(&msLeave, nullptr); |
| 575 } | 574 } |
| 576 if (pTarget->GetClassID() == FWL_Type::Form) { | 575 if (pTarget->GetClassID() == FWL_Type::Form) { |
| 577 m_pHover = nullptr; | 576 m_pHover = nullptr; |
| 578 return; | 577 return; |
| 579 } | 578 } |
| 580 m_pHover = pTarget; | 579 m_pHover = pTarget; |
| 581 CFWL_MsgMouse msHover; | 580 CFWL_MsgMouse msHover; |
| 582 msHover.m_pDstTarget = pTarget; | 581 msHover.m_pDstTarget = pTarget; |
| 583 msHover.m_fx = pMsg->m_fx; | 582 msHover.m_fx = pMsg->m_fx; |
| 584 msHover.m_fy = pMsg->m_fy; | 583 msHover.m_fy = pMsg->m_fy; |
| 585 msHover.m_dwFlags = 0; | 584 msHover.m_dwFlags = 0; |
| 586 msHover.m_dwCmd = FWL_MouseCommand::Hover; | 585 msHover.m_dwCmd = FWL_MouseCommand::Hover; |
| 587 DispatchMessage(&msHover, nullptr); | 586 DispatchMessage(&msHover, nullptr); |
| 588 } | 587 } |
| 589 FX_BOOL CFWL_NoteDriver::IsValidMessage(CFWL_Message* pMessage) { | 588 bool CFWL_NoteDriver::IsValidMessage(CFWL_Message* pMessage) { |
| 590 if (pMessage->GetClassID() == CFWL_MessageType::Post) | 589 if (pMessage->GetClassID() == CFWL_MessageType::Post) |
| 591 return TRUE; | 590 return true; |
| 592 | 591 |
| 593 int32_t iCount = m_noteLoopQueue.GetSize(); | 592 int32_t iCount = m_noteLoopQueue.GetSize(); |
| 594 for (int32_t i = 0; i < iCount; i++) { | 593 for (int32_t i = 0; i < iCount; i++) { |
| 595 CFWL_NoteLoop* pNoteLoop = static_cast<CFWL_NoteLoop*>(m_noteLoopQueue[i]); | 594 CFWL_NoteLoop* pNoteLoop = static_cast<CFWL_NoteLoop*>(m_noteLoopQueue[i]); |
| 596 IFWL_Widget* pForm = pNoteLoop->GetForm(); | 595 IFWL_Widget* pForm = pNoteLoop->GetForm(); |
| 597 if (pForm && (pForm == pMessage->m_pDstTarget)) | 596 if (pForm && (pForm == pMessage->m_pDstTarget)) |
| 598 return TRUE; | 597 return true; |
| 599 } | 598 } |
| 600 iCount = m_forms.GetSize(); | 599 iCount = m_forms.GetSize(); |
| 601 for (int32_t j = 0; j < iCount; j++) { | 600 for (int32_t j = 0; j < iCount; j++) { |
| 602 IFWL_Form* pForm = static_cast<IFWL_Form*>(m_forms[j]); | 601 IFWL_Form* pForm = static_cast<IFWL_Form*>(m_forms[j]); |
| 603 if (pForm == pMessage->m_pDstTarget) | 602 if (pForm == pMessage->m_pDstTarget) |
| 604 return TRUE; | 603 return true; |
| 605 } | 604 } |
| 606 return FALSE; | 605 return false; |
| 607 } | 606 } |
| 608 | 607 |
| 609 IFWL_Widget* CFWL_NoteDriver::GetMessageForm(IFWL_Widget* pDstTarget) { | 608 IFWL_Widget* CFWL_NoteDriver::GetMessageForm(IFWL_Widget* pDstTarget) { |
| 610 int32_t iTrackLoop = m_noteLoopQueue.GetSize(); | 609 int32_t iTrackLoop = m_noteLoopQueue.GetSize(); |
| 611 if (iTrackLoop <= 0) | 610 if (iTrackLoop <= 0) |
| 612 return nullptr; | 611 return nullptr; |
| 613 IFWL_Widget* pMessageForm = nullptr; | 612 IFWL_Widget* pMessageForm = nullptr; |
| 614 if (iTrackLoop > 1) { | 613 if (iTrackLoop > 1) { |
| 615 CFWL_NoteLoop* pNootLoop = | 614 CFWL_NoteLoop* pNootLoop = |
| 616 static_cast<CFWL_NoteLoop*>(m_noteLoopQueue[iTrackLoop - 1]); | 615 static_cast<CFWL_NoteLoop*>(m_noteLoopQueue[iTrackLoop - 1]); |
| 617 pMessageForm = pNootLoop->GetForm(); | 616 pMessageForm = pNootLoop->GetForm(); |
| 618 } else if (m_forms.Find(pDstTarget) < 0) { | 617 } else if (m_forms.Find(pDstTarget) < 0) { |
| 619 pMessageForm = pDstTarget; | 618 pMessageForm = pDstTarget; |
| 620 } | 619 } |
| 621 if (!pMessageForm && pDstTarget) { | 620 if (!pMessageForm && pDstTarget) { |
| 622 CFWL_WidgetMgr* pWidgetMgr = pDstTarget->GetOwnerApp()->GetWidgetMgr(); | 621 CFWL_WidgetMgr* pWidgetMgr = pDstTarget->GetOwnerApp()->GetWidgetMgr(); |
| 623 if (!pWidgetMgr) | 622 if (!pWidgetMgr) |
| 624 return nullptr; | 623 return nullptr; |
| 625 pMessageForm = pWidgetMgr->GetSystemFormWidget(pDstTarget); | 624 pMessageForm = pWidgetMgr->GetSystemFormWidget(pDstTarget); |
| 626 } | 625 } |
| 627 return pMessageForm; | 626 return pMessageForm; |
| 628 } | 627 } |
| 629 | 628 |
| 630 void CFWL_NoteDriver::ClearInvalidEventTargets(FX_BOOL bRemoveAll) { | 629 void CFWL_NoteDriver::ClearInvalidEventTargets(bool bRemoveAll) { |
| 631 auto it = m_eventTargets.begin(); | 630 auto it = m_eventTargets.begin(); |
| 632 while (it != m_eventTargets.end()) { | 631 while (it != m_eventTargets.end()) { |
| 633 auto old = it++; | 632 auto old = it++; |
| 634 if (old->second && (bRemoveAll || old->second->IsInvalid())) { | 633 if (old->second && (bRemoveAll || old->second->IsInvalid())) { |
| 635 delete old->second; | 634 delete old->second; |
| 636 m_eventTargets.erase(old); | 635 m_eventTargets.erase(old); |
| 637 } | 636 } |
| 638 } | 637 } |
| 639 } | 638 } |
| 640 | 639 |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 685 CFX_SizeF CFWL_CoreToolTipDP::GetToolTipIconSize(IFWL_Widget* pWidget) { | 684 CFX_SizeF CFWL_CoreToolTipDP::GetToolTipIconSize(IFWL_Widget* pWidget) { |
| 686 return CFX_SizeF(); | 685 return CFX_SizeF(); |
| 687 } | 686 } |
| 688 | 687 |
| 689 CFX_RectF CFWL_CoreToolTipDP::GetAnchor() { | 688 CFX_RectF CFWL_CoreToolTipDP::GetAnchor() { |
| 690 return m_fAnchor; | 689 return m_fAnchor; |
| 691 } | 690 } |
| 692 | 691 |
| 693 CFWL_EventTarget::CFWL_EventTarget(CFWL_NoteDriver* pNoteDriver, | 692 CFWL_EventTarget::CFWL_EventTarget(CFWL_NoteDriver* pNoteDriver, |
| 694 IFWL_Widget* pListener) | 693 IFWL_Widget* pListener) |
| 695 : m_pListener(pListener), m_pNoteDriver(pNoteDriver), m_bInvalid(FALSE) {} | 694 : m_pListener(pListener), m_pNoteDriver(pNoteDriver), m_bInvalid(false) {} |
| 696 CFWL_EventTarget::~CFWL_EventTarget() { | 695 CFWL_EventTarget::~CFWL_EventTarget() { |
| 697 m_eventSources.RemoveAll(); | 696 m_eventSources.RemoveAll(); |
| 698 } | 697 } |
| 699 | 698 |
| 700 int32_t CFWL_EventTarget::SetEventSource(IFWL_Widget* pSource, | 699 int32_t CFWL_EventTarget::SetEventSource(IFWL_Widget* pSource, |
| 701 uint32_t dwFilter) { | 700 uint32_t dwFilter) { |
| 702 if (pSource) { | 701 if (pSource) { |
| 703 m_eventSources.SetAt(pSource, dwFilter); | 702 m_eventSources.SetAt(pSource, dwFilter); |
| 704 return m_eventSources.GetCount(); | 703 return m_eventSources.GetCount(); |
| 705 } | 704 } |
| 706 return 1; | 705 return 1; |
| 707 } | 706 } |
| 708 | 707 |
| 709 FX_BOOL CFWL_EventTarget::ProcessEvent(CFWL_Event* pEvent) { | 708 bool CFWL_EventTarget::ProcessEvent(CFWL_Event* pEvent) { |
| 710 IFWL_WidgetDelegate* pDelegate = m_pListener->GetDelegate(); | 709 IFWL_WidgetDelegate* pDelegate = m_pListener->GetDelegate(); |
| 711 if (!pDelegate) | 710 if (!pDelegate) |
| 712 return FALSE; | 711 return false; |
| 713 if (m_eventSources.GetCount() == 0) { | 712 if (m_eventSources.GetCount() == 0) { |
| 714 pDelegate->OnProcessEvent(pEvent); | 713 pDelegate->OnProcessEvent(pEvent); |
| 715 return TRUE; | 714 return true; |
| 716 } | 715 } |
| 717 FX_POSITION pos = m_eventSources.GetStartPosition(); | 716 FX_POSITION pos = m_eventSources.GetStartPosition(); |
| 718 while (pos) { | 717 while (pos) { |
| 719 IFWL_Widget* pSource = nullptr; | 718 IFWL_Widget* pSource = nullptr; |
| 720 uint32_t dwFilter = 0; | 719 uint32_t dwFilter = 0; |
| 721 m_eventSources.GetNextAssoc(pos, (void*&)pSource, dwFilter); | 720 m_eventSources.GetNextAssoc(pos, (void*&)pSource, dwFilter); |
| 722 if (pSource == pEvent->m_pSrcTarget || | 721 if (pSource == pEvent->m_pSrcTarget || |
| 723 pEvent->GetClassID() == CFWL_EventType::Idle) { | 722 pEvent->GetClassID() == CFWL_EventType::Idle) { |
| 724 if (IsFilterEvent(pEvent, dwFilter)) { | 723 if (IsFilterEvent(pEvent, dwFilter)) { |
| 725 pDelegate->OnProcessEvent(pEvent); | 724 pDelegate->OnProcessEvent(pEvent); |
| 726 return TRUE; | 725 return true; |
| 727 } | 726 } |
| 728 } | 727 } |
| 729 } | 728 } |
| 730 return FALSE; | 729 return false; |
| 731 } | 730 } |
| 732 | 731 |
| 733 FX_BOOL CFWL_EventTarget::IsFilterEvent(CFWL_Event* pEvent, uint32_t dwFilter) { | 732 bool CFWL_EventTarget::IsFilterEvent(CFWL_Event* pEvent, uint32_t dwFilter) { |
| 734 if (dwFilter == FWL_EVENT_ALL_MASK) | 733 if (dwFilter == FWL_EVENT_ALL_MASK) |
| 735 return TRUE; | 734 return true; |
| 736 | 735 |
| 737 switch (pEvent->GetClassID()) { | 736 switch (pEvent->GetClassID()) { |
| 738 case CFWL_EventType::Mouse: | 737 case CFWL_EventType::Mouse: |
| 739 return !!(dwFilter & FWL_EVENT_MOUSE_MASK); | 738 return !!(dwFilter & FWL_EVENT_MOUSE_MASK); |
| 740 case CFWL_EventType::MouseWheel: | 739 case CFWL_EventType::MouseWheel: |
| 741 return !!(dwFilter & FWL_EVENT_MOUSEWHEEL_MASK); | 740 return !!(dwFilter & FWL_EVENT_MOUSEWHEEL_MASK); |
| 742 case CFWL_EventType::Key: | 741 case CFWL_EventType::Key: |
| 743 return !!(dwFilter & FWL_EVENT_KEY_MASK); | 742 return !!(dwFilter & FWL_EVENT_KEY_MASK); |
| 744 case CFWL_EventType::SetFocus: | 743 case CFWL_EventType::SetFocus: |
| 745 case CFWL_EventType::KillFocus: | 744 case CFWL_EventType::KillFocus: |
| (...skipping 23 matching lines...) Expand all Loading... |
| 769 if (!s_pInstance) | 768 if (!s_pInstance) |
| 770 s_pInstance = new CFWL_ToolTipContainer; | 769 s_pInstance = new CFWL_ToolTipContainer; |
| 771 return s_pInstance; | 770 return s_pInstance; |
| 772 } | 771 } |
| 773 | 772 |
| 774 // static | 773 // static |
| 775 void CFWL_ToolTipContainer::DeleteInstance() { | 774 void CFWL_ToolTipContainer::DeleteInstance() { |
| 776 delete s_pInstance; | 775 delete s_pInstance; |
| 777 s_pInstance = nullptr; | 776 s_pInstance = nullptr; |
| 778 } | 777 } |
| OLD | NEW |