534 {
535 LPARAM result_lparam = lparam;
536 int xPos = 0, yPos = 0;
538 UINT button_pressed = 0;
540
542 case kWmDpiChangedBeforeParent:
545 return 0;
546 case WM_SIZE:
547 width = LOWORD(lparam);
549
550 current_width_ =
width;
553
556 break;
557 case WM_PAINT:
559 break;
560 case WM_TOUCH: {
561 UINT num_points = LOWORD(wparam);
562 touch_points_.resize(num_points);
563 auto touch_input_handle = reinterpret_cast<HTOUCHINPUT>(lparam);
564 if (GetTouchInputInfo(touch_input_handle, num_points,
565 touch_points_.data(), sizeof(TOUCHINPUT))) {
566 for (const auto& touch : touch_points_) {
567
569
570 POINT pt = {TOUCH_COORD_TO_PIXEL(touch.x),
571 TOUCH_COORD_TO_PIXEL(touch.y)};
572 ScreenToClient(window_handle_, &pt);
573 auto x =
static_cast<double>(pt.x);
574 auto y =
static_cast<double>(pt.y);
575
576 if (touch.dwFlags & TOUCHEVENTF_DOWN) {
578 WM_LBUTTONDOWN);
579 } else if (touch.dwFlags & TOUCHEVENTF_MOVE) {
581 } else if (touch.dwFlags & TOUCHEVENTF_UP) {
583 WM_LBUTTONDOWN);
586 }
587 }
588 CloseTouchInputHandle(touch_input_handle);
589 }
590 return 0;
591 }
592 case WM_MOUSEMOVE:
593 device_kind = GetFlutterPointerDeviceKind();
595 TrackMouseLeaveEvent(window_handle_);
596
597 xPos = GET_X_LPARAM(lparam);
598 yPos = GET_Y_LPARAM(lparam);
599 mouse_x_ = static_cast<double>(xPos);
600 mouse_y_ = static_cast<double>(yPos);
601
602 int mods = 0;
603 if (wparam & MK_CONTROL) {
605 }
606 if (wparam & MK_SHIFT) {
608 }
609 OnPointerMove(mouse_x_, mouse_y_, device_kind, kDefaultPointerDeviceId,
610 mods);
611 }
612 break;
613 case WM_MOUSELEAVE:
614 device_kind = GetFlutterPointerDeviceKind();
617 kDefaultPointerDeviceId);
618 }
619
620
621
622
623 tracking_mouse_leave_ = false;
624 break;
625 case WM_SETCURSOR: {
626 UINT hit_test_result = LOWORD(lparam);
627 if (hit_test_result == HTCLIENT) {
630 }
631 break;
632 }
633 case WM_SETFOCUS:
635 ::CreateCaret(window_handle_, nullptr, 1, 1);
636 break;
637 case WM_KILLFOCUS:
639 ::DestroyCaret();
640 break;
641 case WM_LBUTTONDOWN:
642 case WM_RBUTTONDOWN:
643 case WM_MBUTTONDOWN:
644 case WM_XBUTTONDOWN:
645 device_kind = GetFlutterPointerDeviceKind();
647 break;
648 }
649
650 if (
message == WM_LBUTTONDOWN) {
651
652
653
654
655
656 SetCapture(window_handle_);
657 }
659 if (
message == WM_XBUTTONDOWN) {
660 button_pressed = GET_XBUTTON_WPARAM(wparam);
661 }
662 xPos = GET_X_LPARAM(lparam);
663 yPos = GET_Y_LPARAM(lparam);
664 OnPointerDown(
static_cast<double>(xPos),
static_cast<double>(yPos),
665 device_kind, kDefaultPointerDeviceId, button_pressed);
666 break;
667 case WM_LBUTTONUP:
668 case WM_RBUTTONUP:
669 case WM_MBUTTONUP:
670 case WM_XBUTTONUP:
671 device_kind = GetFlutterPointerDeviceKind();
673 break;
674 }
675
677 ReleaseCapture();
678 }
681 button_pressed = GET_XBUTTON_WPARAM(wparam);
682 }
683 xPos = GET_X_LPARAM(lparam);
684 yPos = GET_Y_LPARAM(lparam);
685 OnPointerUp(
static_cast<double>(xPos),
static_cast<double>(yPos),
686 device_kind, kDefaultPointerDeviceId, button_pressed);
687 break;
688 case WM_MOUSEWHEEL:
690 -(static_cast<short>(HIWORD(wparam)) /
691 static_cast<double>(WHEEL_DELTA)),
693 break;
694 case WM_MOUSEHWHEEL:
695 OnScroll((
static_cast<short>(HIWORD(wparam)) /
696 static_cast<double>(WHEEL_DELTA)),
698 break;
699 case WM_GETOBJECT: {
701 if (lresult) {
702 return lresult;
703 }
704 break;
705 }
706 case WM_TIMER:
707 if (wparam == kDirectManipulationTimer) {
709 return 0;
710 }
711 break;
712 case DM_POINTERHITTEST: {
714 UINT contact_id = GET_POINTERID_WPARAM(wparam);
715 POINTER_INPUT_TYPE pointer_type;
716 if (windows_proc_table_->GetPointerType(contact_id, &pointer_type) &&
717 pointer_type == PT_TOUCHPAD) {
719 }
720 }
721 break;
722 }
723 case WM_INPUTLANGCHANGE:
724
725
726 break;
727 case WM_IME_SETCONTEXT:
729
730
731
732 result_lparam &= ~ISC_SHOWUICOMPOSITIONWINDOW;
733 break;
734 case WM_IME_STARTCOMPOSITION:
736
737
738
740 case WM_IME_COMPOSITION:
742 if (lparam & GCS_RESULTSTR || lparam & GCS_COMPSTR) {
743
744
745
746
747
749 }
750 break;
751 case WM_IME_ENDCOMPOSITION:
754 case WM_IME_REQUEST:
756 break;
757 case WM_UNICHAR: {
758
759 if (wparam == UNICODE_NOCHAR)
761
762 break;
763 }
764 case WM_THEMECHANGED:
766 break;
767 case WM_DEADCHAR:
768 case WM_SYSDEADCHAR:
769 case WM_CHAR:
770 case WM_SYSCHAR:
771 case WM_KEYDOWN:
772 case WM_SYSKEYDOWN:
773 case WM_KEYUP:
774 case WM_SYSKEYUP:
775 if (keyboard_manager_->HandleMessage(
message, wparam, lparam)) {
776 return 0;
777 }
778 break;
779 }
780
782}
virtual void OnPointerLeave(double x, double y, FlutterPointerDeviceKind device_kind, int32_t device_id)
virtual void OnThemeChange()
virtual void OnImeRequest(UINT const message, WPARAM const wparam, LPARAM const lparam)
virtual LRESULT Win32DefWindowProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)
virtual void OnImeStartComposition(UINT const message, WPARAM const wparam, LPARAM const lparam)
virtual void OnSetCursor()
virtual void OnScroll(double delta_x, double delta_y, FlutterPointerDeviceKind device_kind, int32_t device_id)
virtual void OnPointerUp(double x, double y, FlutterPointerDeviceKind device_kind, int32_t device_id, UINT button)
std::unique_ptr< DirectManipulationOwner > direct_manipulation_owner_
virtual void OnPointerDown(double x, double y, FlutterPointerDeviceKind device_kind, int32_t device_id, UINT button)
virtual void OnImeSetContext(UINT const message, WPARAM const wparam, LPARAM const lparam)
virtual void OnWindowStateEvent(WindowStateEvent event)
virtual void OnPointerMove(double x, double y, FlutterPointerDeviceKind device_kind, int32_t device_id, int modifiers_state)
virtual void OnImeComposition(UINT const message, WPARAM const wparam, LPARAM const lparam)
virtual void OnDpiScale(unsigned int dpi)
virtual LRESULT OnGetObject(UINT const message, WPARAM const wparam, LPARAM const lparam)
virtual void OnImeEndComposition(UINT const message, WPARAM const wparam, LPARAM const lparam)
void ReleaseNumber(uint32_t number)
uint32_t GetGeneratedId(uint32_t number)
FlutterPointerDeviceKind
The device type that created a pointer event.
@ kFlutterPointerDeviceKindTouch
@ kFlutterPointerDeviceKindMouse