| 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/ptr_util.h" | 10 #include "third_party/base/ptr_util.h" |
| (...skipping 214 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 225 MouseSecondary(static_cast<CFWL_MsgMouse*>(pMessage)); | 225 MouseSecondary(static_cast<CFWL_MsgMouse*>(pMessage)); |
| 226 return true; | 226 return true; |
| 227 } | 227 } |
| 228 return false; | 228 return false; |
| 229 } | 229 } |
| 230 | 230 |
| 231 bool CFWL_NoteDriver::DispatchMessage(CFWL_Message* pMessage, | 231 bool CFWL_NoteDriver::DispatchMessage(CFWL_Message* pMessage, |
| 232 IFWL_Widget* pMessageForm) { | 232 IFWL_Widget* pMessageForm) { |
| 233 bool bRet = false; | 233 bool bRet = false; |
| 234 switch (pMessage->GetClassID()) { | 234 switch (pMessage->GetClassID()) { |
| 235 case CFWL_MessageType::Activate: { | |
| 236 bRet = DoActivate(static_cast<CFWL_MsgActivate*>(pMessage), pMessageForm); | |
| 237 break; | |
| 238 } | |
| 239 case CFWL_MessageType::Deactivate: { | |
| 240 bRet = DoDeactivate(static_cast<CFWL_MsgDeactivate*>(pMessage), | |
| 241 pMessageForm); | |
| 242 break; | |
| 243 } | |
| 244 case CFWL_MessageType::SetFocus: { | 235 case CFWL_MessageType::SetFocus: { |
| 245 bRet = DoSetFocus(static_cast<CFWL_MsgSetFocus*>(pMessage), pMessageForm); | 236 bRet = DoSetFocus(static_cast<CFWL_MsgSetFocus*>(pMessage), pMessageForm); |
| 246 break; | 237 break; |
| 247 } | 238 } |
| 248 case CFWL_MessageType::KillFocus: { | 239 case CFWL_MessageType::KillFocus: { |
| 249 bRet = | 240 bRet = |
| 250 DoKillFocus(static_cast<CFWL_MsgKillFocus*>(pMessage), pMessageForm); | 241 DoKillFocus(static_cast<CFWL_MsgKillFocus*>(pMessage), pMessageForm); |
| 251 break; | 242 break; |
| 252 } | 243 } |
| 253 case CFWL_MessageType::Key: { | 244 case CFWL_MessageType::Key: { |
| 254 bRet = DoKey(static_cast<CFWL_MsgKey*>(pMessage), pMessageForm); | 245 bRet = DoKey(static_cast<CFWL_MsgKey*>(pMessage), pMessageForm); |
| 255 break; | 246 break; |
| 256 } | 247 } |
| 257 case CFWL_MessageType::Mouse: { | 248 case CFWL_MessageType::Mouse: { |
| 258 bRet = DoMouse(static_cast<CFWL_MsgMouse*>(pMessage), pMessageForm); | 249 bRet = DoMouse(static_cast<CFWL_MsgMouse*>(pMessage), pMessageForm); |
| 259 break; | 250 break; |
| 260 } | 251 } |
| 261 case CFWL_MessageType::MouseWheel: { | 252 case CFWL_MessageType::MouseWheel: { |
| 262 bRet = DoWheel(static_cast<CFWL_MsgMouseWheel*>(pMessage), pMessageForm); | 253 bRet = DoWheel(static_cast<CFWL_MsgMouseWheel*>(pMessage), pMessageForm); |
| 263 break; | 254 break; |
| 264 } | 255 } |
| 265 case CFWL_MessageType::Size: { | |
| 266 bRet = DoSize(static_cast<CFWL_MsgSize*>(pMessage)); | |
| 267 break; | |
| 268 } | |
| 269 case CFWL_MessageType::Cursor: { | |
| 270 bRet = true; | |
| 271 break; | |
| 272 } | |
| 273 case CFWL_MessageType::WindowMove: { | |
| 274 bRet = DoWindowMove(static_cast<CFWL_MsgWindowMove*>(pMessage), | |
| 275 pMessageForm); | |
| 276 break; | |
| 277 } | |
| 278 case CFWL_MessageType::DropFiles: { | |
| 279 bRet = | |
| 280 DoDragFiles(static_cast<CFWL_MsgDropFiles*>(pMessage), pMessageForm); | |
| 281 break; | |
| 282 } | |
| 283 default: { | 256 default: { |
| 284 bRet = true; | 257 bRet = true; |
| 285 break; | 258 break; |
| 286 } | 259 } |
| 287 } | 260 } |
| 288 if (bRet) { | 261 if (bRet) { |
| 289 if (IFWL_WidgetDelegate* pDelegate = | 262 if (IFWL_WidgetDelegate* pDelegate = |
| 290 pMessage->m_pDstTarget->GetDelegate()) { | 263 pMessage->m_pDstTarget->GetDelegate()) { |
| 291 pDelegate->OnProcessMessage(pMessage); | 264 pDelegate->OnProcessMessage(pMessage); |
| 292 } | 265 } |
| 293 } | 266 } |
| 294 return bRet; | 267 return bRet; |
| 295 } | 268 } |
| 296 | 269 |
| 297 bool CFWL_NoteDriver::DoActivate(CFWL_MsgActivate* pMsg, | |
| 298 IFWL_Widget* pMessageForm) { | |
| 299 pMsg->m_pDstTarget = pMessageForm; | |
| 300 return !!(pMsg->m_pDstTarget->GetStates() & FWL_WGTSTATE_Deactivated); | |
| 301 } | |
| 302 | |
| 303 bool CFWL_NoteDriver::DoDeactivate(CFWL_MsgDeactivate* pMsg, | |
| 304 IFWL_Widget* pMessageForm) { | |
| 305 int32_t iTrackLoop = m_noteLoopQueue.GetSize(); | |
| 306 if (iTrackLoop <= 0) | |
| 307 return false; | |
| 308 if (iTrackLoop == 1) { | |
| 309 if (pMessageForm->IsInstance(FX_WSTRC(L"FWL_FORMPROXY"))) { | |
| 310 return false; | |
| 311 } | |
| 312 if (pMsg->m_pSrcTarget && | |
| 313 pMsg->m_pSrcTarget->IsInstance(FX_WSTRC(L"FWL_FORMPROXY"))) { | |
| 314 return false; | |
| 315 } | |
| 316 if (pMsg->m_pSrcTarget && | |
| 317 pMsg->m_pSrcTarget->GetClassID() == FWL_Type::ToolTip) { | |
| 318 return false; | |
| 319 } | |
| 320 return true; | |
| 321 } | |
| 322 IFWL_Widget* pDst = pMsg->m_pDstTarget; | |
| 323 if (!pDst) | |
| 324 return false; | |
| 325 #if (_FX_OS_ == _FX_MACOSX_) | |
| 326 if (pDst == pMessageForm && pDst->IsInstance(L"FWL_FORMPROXY")) { | |
| 327 return true; | |
| 328 } | |
| 329 #endif | |
| 330 return pDst != pMessageForm && | |
| 331 !pDst->IsInstance(FX_WSTRC(L"FWL_FORMPROXY")) && | |
| 332 !pMessageForm->IsInstance(FX_WSTRC(L"FWL_FORMPROXY")); | |
| 333 } | |
| 334 bool CFWL_NoteDriver::DoSetFocus(CFWL_MsgSetFocus* pMsg, | 270 bool CFWL_NoteDriver::DoSetFocus(CFWL_MsgSetFocus* pMsg, |
| 335 IFWL_Widget* pMessageForm) { | 271 IFWL_Widget* pMessageForm) { |
| 336 CFWL_WidgetMgr* pWidgetMgr = pMessageForm->GetOwnerApp()->GetWidgetMgr(); | 272 CFWL_WidgetMgr* pWidgetMgr = pMessageForm->GetOwnerApp()->GetWidgetMgr(); |
| 337 if (pWidgetMgr->IsFormDisabled()) { | 273 if (pWidgetMgr->IsFormDisabled()) { |
| 338 m_pFocus = pMsg->m_pDstTarget; | 274 m_pFocus = pMsg->m_pDstTarget; |
| 339 return true; | 275 return true; |
| 340 } | 276 } |
| 341 IFWL_Widget* pWidget = pMsg->m_pDstTarget; | 277 IFWL_Widget* pWidget = pMsg->m_pDstTarget; |
| 342 if (pWidget) { | 278 if (pWidget) { |
| 343 IFWL_Form* pForm = static_cast<IFWL_Form*>(pWidget); | 279 IFWL_Form* pForm = static_cast<IFWL_Form*>(pWidget); |
| (...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 437 | 373 |
| 438 IFWL_Widget* pDst = | 374 IFWL_Widget* pDst = |
| 439 pWidgetMgr->GetWidgetAtPoint(pMessageForm, pMsg->m_fx, pMsg->m_fy); | 375 pWidgetMgr->GetWidgetAtPoint(pMessageForm, pMsg->m_fx, pMsg->m_fy); |
| 440 if (!pDst) | 376 if (!pDst) |
| 441 return false; | 377 return false; |
| 442 | 378 |
| 443 pMessageForm->TransformTo(pDst, pMsg->m_fx, pMsg->m_fy); | 379 pMessageForm->TransformTo(pDst, pMsg->m_fx, pMsg->m_fy); |
| 444 pMsg->m_pDstTarget = pDst; | 380 pMsg->m_pDstTarget = pDst; |
| 445 return true; | 381 return true; |
| 446 } | 382 } |
| 447 bool CFWL_NoteDriver::DoSize(CFWL_MsgSize* pMsg) { | 383 |
| 448 CFWL_WidgetMgr* pWidgetMgr = | |
| 449 pMsg->m_pDstTarget->GetOwnerApp()->GetWidgetMgr(); | |
| 450 if (!pWidgetMgr) | |
| 451 return false; | |
| 452 pWidgetMgr->NotifySizeChanged(pMsg->m_pDstTarget, (FX_FLOAT)pMsg->m_iWidth, | |
| 453 (FX_FLOAT)pMsg->m_iHeight); | |
| 454 return true; | |
| 455 } | |
| 456 bool CFWL_NoteDriver::DoWindowMove(CFWL_MsgWindowMove* pMsg, | |
| 457 IFWL_Widget* pMessageForm) { | |
| 458 return pMsg->m_pDstTarget == pMessageForm; | |
| 459 } | |
| 460 bool CFWL_NoteDriver::DoDragFiles(CFWL_MsgDropFiles* pMsg, | |
| 461 IFWL_Widget* pMessageForm) { | |
| 462 return pMsg->m_pDstTarget == pMessageForm; | |
| 463 } | |
| 464 bool CFWL_NoteDriver::DoMouseEx(CFWL_MsgMouse* pMsg, | 384 bool CFWL_NoteDriver::DoMouseEx(CFWL_MsgMouse* pMsg, |
| 465 IFWL_Widget* pMessageForm) { | 385 IFWL_Widget* pMessageForm) { |
| 466 CFWL_WidgetMgr* pWidgetMgr = pMessageForm->GetOwnerApp()->GetWidgetMgr(); | 386 CFWL_WidgetMgr* pWidgetMgr = pMessageForm->GetOwnerApp()->GetWidgetMgr(); |
| 467 if (!pWidgetMgr) | 387 if (!pWidgetMgr) |
| 468 return false; | 388 return false; |
| 469 IFWL_Widget* pTarget = nullptr; | 389 IFWL_Widget* pTarget = nullptr; |
| 470 if (m_pGrab) | 390 if (m_pGrab) |
| 471 pTarget = m_pGrab; | 391 pTarget = m_pGrab; |
| 472 if (!pTarget) { | 392 if (!pTarget) { |
| 473 pTarget = | 393 pTarget = |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 505 m_pHover = pTarget; | 425 m_pHover = pTarget; |
| 506 CFWL_MsgMouse msHover; | 426 CFWL_MsgMouse msHover; |
| 507 msHover.m_pDstTarget = pTarget; | 427 msHover.m_pDstTarget = pTarget; |
| 508 msHover.m_fx = pMsg->m_fx; | 428 msHover.m_fx = pMsg->m_fx; |
| 509 msHover.m_fy = pMsg->m_fy; | 429 msHover.m_fy = pMsg->m_fy; |
| 510 msHover.m_dwFlags = 0; | 430 msHover.m_dwFlags = 0; |
| 511 msHover.m_dwCmd = FWL_MouseCommand::Hover; | 431 msHover.m_dwCmd = FWL_MouseCommand::Hover; |
| 512 DispatchMessage(&msHover, nullptr); | 432 DispatchMessage(&msHover, nullptr); |
| 513 } | 433 } |
| 514 bool CFWL_NoteDriver::IsValidMessage(CFWL_Message* pMessage) { | 434 bool CFWL_NoteDriver::IsValidMessage(CFWL_Message* pMessage) { |
| 515 if (pMessage->GetClassID() == CFWL_MessageType::Post) | |
| 516 return true; | |
| 517 | |
| 518 int32_t iCount = m_noteLoopQueue.GetSize(); | 435 int32_t iCount = m_noteLoopQueue.GetSize(); |
| 519 for (int32_t i = 0; i < iCount; i++) { | 436 for (int32_t i = 0; i < iCount; i++) { |
| 520 CFWL_NoteLoop* pNoteLoop = static_cast<CFWL_NoteLoop*>(m_noteLoopQueue[i]); | 437 CFWL_NoteLoop* pNoteLoop = static_cast<CFWL_NoteLoop*>(m_noteLoopQueue[i]); |
| 521 IFWL_Widget* pForm = pNoteLoop->GetForm(); | 438 IFWL_Widget* pForm = pNoteLoop->GetForm(); |
| 522 if (pForm && (pForm == pMessage->m_pDstTarget)) | 439 if (pForm && (pForm == pMessage->m_pDstTarget)) |
| 523 return true; | 440 return true; |
| 524 } | 441 } |
| 525 iCount = m_forms.GetSize(); | 442 iCount = m_forms.GetSize(); |
| 526 for (int32_t j = 0; j < iCount; j++) { | 443 for (int32_t j = 0; j < iCount; j++) { |
| 527 IFWL_Form* pForm = static_cast<IFWL_Form*>(m_forms[j]); | 444 IFWL_Form* pForm = static_cast<IFWL_Form*>(m_forms[j]); |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 584 return false; | 501 return false; |
| 585 if (m_eventSources.GetCount() == 0) { | 502 if (m_eventSources.GetCount() == 0) { |
| 586 pDelegate->OnProcessEvent(pEvent); | 503 pDelegate->OnProcessEvent(pEvent); |
| 587 return true; | 504 return true; |
| 588 } | 505 } |
| 589 FX_POSITION pos = m_eventSources.GetStartPosition(); | 506 FX_POSITION pos = m_eventSources.GetStartPosition(); |
| 590 while (pos) { | 507 while (pos) { |
| 591 IFWL_Widget* pSource = nullptr; | 508 IFWL_Widget* pSource = nullptr; |
| 592 uint32_t dwFilter = 0; | 509 uint32_t dwFilter = 0; |
| 593 m_eventSources.GetNextAssoc(pos, (void*&)pSource, dwFilter); | 510 m_eventSources.GetNextAssoc(pos, (void*&)pSource, dwFilter); |
| 594 if (pSource == pEvent->m_pSrcTarget || | 511 if (pSource == pEvent->m_pSrcTarget) { |
| 595 pEvent->GetClassID() == CFWL_EventType::Idle) { | |
| 596 if (IsFilterEvent(pEvent, dwFilter)) { | 512 if (IsFilterEvent(pEvent, dwFilter)) { |
| 597 pDelegate->OnProcessEvent(pEvent); | 513 pDelegate->OnProcessEvent(pEvent); |
| 598 return true; | 514 return true; |
| 599 } | 515 } |
| 600 } | 516 } |
| 601 } | 517 } |
| 602 return false; | 518 return false; |
| 603 } | 519 } |
| 604 | 520 |
| 605 bool CFWL_EventTarget::IsFilterEvent(CFWL_Event* pEvent, | 521 bool CFWL_EventTarget::IsFilterEvent(CFWL_Event* pEvent, |
| 606 uint32_t dwFilter) const { | 522 uint32_t dwFilter) const { |
| 607 if (dwFilter == FWL_EVENT_ALL_MASK) | 523 if (dwFilter == FWL_EVENT_ALL_MASK) |
| 608 return true; | 524 return true; |
| 609 | 525 |
| 610 switch (pEvent->GetClassID()) { | 526 switch (pEvent->GetClassID()) { |
| 611 case CFWL_EventType::Mouse: | 527 case CFWL_EventType::Mouse: |
| 612 return !!(dwFilter & FWL_EVENT_MOUSE_MASK); | 528 return !!(dwFilter & FWL_EVENT_MOUSE_MASK); |
| 613 case CFWL_EventType::MouseWheel: | 529 case CFWL_EventType::MouseWheel: |
| 614 return !!(dwFilter & FWL_EVENT_MOUSEWHEEL_MASK); | 530 return !!(dwFilter & FWL_EVENT_MOUSEWHEEL_MASK); |
| 615 case CFWL_EventType::Key: | 531 case CFWL_EventType::Key: |
| 616 return !!(dwFilter & FWL_EVENT_KEY_MASK); | 532 return !!(dwFilter & FWL_EVENT_KEY_MASK); |
| 617 case CFWL_EventType::SetFocus: | 533 case CFWL_EventType::SetFocus: |
| 618 case CFWL_EventType::KillFocus: | 534 case CFWL_EventType::KillFocus: |
| 619 return !!(dwFilter & FWL_EVENT_FOCUSCHANGED_MASK); | 535 return !!(dwFilter & FWL_EVENT_FOCUSCHANGED_MASK); |
| 620 case CFWL_EventType::Draw: | |
| 621 return !!(dwFilter & FWL_EVENT_DRAW_MASK); | |
| 622 case CFWL_EventType::Close: | 536 case CFWL_EventType::Close: |
| 623 return !!(dwFilter & FWL_EVENT_CLOSE_MASK); | 537 return !!(dwFilter & FWL_EVENT_CLOSE_MASK); |
| 624 case CFWL_EventType::SizeChanged: | 538 case CFWL_EventType::SizeChanged: |
| 625 return !!(dwFilter & FWL_EVENT_SIZECHANGED_MASK); | 539 return !!(dwFilter & FWL_EVENT_SIZECHANGED_MASK); |
| 626 case CFWL_EventType::Idle: | |
| 627 return !!(dwFilter & FWL_EVENT_IDLE_MASK); | |
| 628 default: | 540 default: |
| 629 return !!(dwFilter & FWL_EVENT_CONTROL_MASK); | 541 return !!(dwFilter & FWL_EVENT_CONTROL_MASK); |
| 630 } | 542 } |
| 631 } | 543 } |
| OLD | NEW |