@@ -746,32 +746,57 @@ namespace dom
746746
747747 void Element::simulateMouseDown (const glm::vec3 &hitPointInWorld)
748748 {
749- dispatchEventInternal (events::MouseEvent::MouseDown ());
750- dispatchEventInternal (events::PointerEvent::PointerDown ());
749+ auto mouseEvent = events::MouseEvent::MouseDown ();
750+ mouseEvent->setTarget (shared_from_this ());
751+ dispatchEventInternal (std::move (mouseEvent));
752+
753+ auto pointerEvent = events::PointerEvent::PointerDown ();
754+ pointerEvent->setTarget (shared_from_this ());
755+ dispatchEventInternal (std::move (pointerEvent));
751756 }
752757
753758 void Element::simulateMouseUp (const glm::vec3 &hitPointInWorld)
754759 {
755- dispatchEventInternal (events::MouseEvent::MouseUp ());
756- dispatchEventInternal (events::PointerEvent::PointerUp ());
760+ auto mouseEvent = events::MouseEvent::MouseUp ();
761+ mouseEvent->setTarget (shared_from_this ());
762+ dispatchEventInternal (std::move (mouseEvent));
763+
764+ auto pointerEvent = events::PointerEvent::PointerUp ();
765+ pointerEvent->setTarget (shared_from_this ());
766+ dispatchEventInternal (std::move (pointerEvent));
757767 }
758768
759769 void Element::simulateMouseMove (const glm::vec3 &hitPointInWorld)
760770 {
761- dispatchEventInternal (events::MouseEvent::MouseMove ());
762- dispatchEventInternal (events::PointerEvent::PointerMove ());
771+ auto mouseEvent = events::MouseEvent::MouseMove ();
772+ mouseEvent->setTarget (shared_from_this ());
773+ dispatchEventInternal (std::move (mouseEvent));
774+
775+ auto pointerEvent = events::PointerEvent::PointerMove ();
776+ pointerEvent->setTarget (shared_from_this ());
777+ dispatchEventInternal (std::move (pointerEvent));
763778 }
764779
765780 void Element::simulateMouseOut (const glm::vec3 &hitPointInWorld)
766781 {
767- dispatchEventInternal (events::MouseEvent::MouseOut ());
768- dispatchEventInternal (events::PointerEvent::PointerOut ());
782+ auto mouseEvent = events::MouseEvent::MouseOut ();
783+ mouseEvent->setTarget (shared_from_this ());
784+ dispatchEventInternal (std::move (mouseEvent));
785+
786+ auto pointerEvent = events::PointerEvent::PointerOut ();
787+ pointerEvent->setTarget (shared_from_this ());
788+ dispatchEventInternal (std::move (pointerEvent));
769789 }
770790
771791 void Element::simulateMouseOver (const glm::vec3 &hitPointInWorld)
772792 {
773- dispatchEventInternal (events::MouseEvent::MouseOver ());
774- dispatchEventInternal (events::PointerEvent::PointerOver ());
793+ auto mouseEvent = events::MouseEvent::MouseOver ();
794+ mouseEvent->setTarget (shared_from_this ());
795+ dispatchEventInternal (std::move (mouseEvent));
796+
797+ auto pointerEvent = events::PointerEvent::PointerOver ();
798+ pointerEvent->setTarget (shared_from_this ());
799+ dispatchEventInternal (std::move (pointerEvent));
775800 }
776801
777802 void Element::simulateMouseEnter (const glm::vec3 &hitPointInWorld)
@@ -780,8 +805,13 @@ namespace dom
780805 return ;
781806 setActionState (is_hovered_, true );
782807
783- dispatchEventInternal (events::MouseEvent::MouseEnter ());
784- dispatchEventInternal (events::PointerEvent::PointerEnter ());
808+ auto mouseEvent = events::MouseEvent::MouseEnter ();
809+ mouseEvent->setTarget (shared_from_this ());
810+ dispatchEventInternal (std::move (mouseEvent));
811+
812+ auto pointerEvent = events::PointerEvent::PointerEnter ();
813+ pointerEvent->setTarget (shared_from_this ());
814+ dispatchEventInternal (std::move (pointerEvent));
785815 }
786816
787817 void Element::simulateMouseLeave (const glm::vec3 &hitPointInWorld)
@@ -790,14 +820,20 @@ namespace dom
790820 return ;
791821 setActionState (is_hovered_, false );
792822
793- dispatchEventInternal (events::MouseEvent::MouseLeave ());
794- dispatchEventInternal (events::PointerEvent::PointerLeave ());
823+ auto mouseEvent = events::MouseEvent::MouseLeave ();
824+ mouseEvent->setTarget (shared_from_this ());
825+ dispatchEventInternal (std::move (mouseEvent));
826+
827+ auto pointerEvent = events::PointerEvent::PointerLeave ();
828+ pointerEvent->setTarget (shared_from_this ());
829+ dispatchEventInternal (std::move (pointerEvent));
795830 }
796831
797832 void Element::simulateClick (const glm::vec3 &hitPointInWorld)
798833 {
799834 // Create a click event object to pass to the handler
800835 auto clickEvent = events::PointerEvent::Click ();
836+ clickEvent->setTarget (shared_from_this ());
801837
802838 // Execute click handler if it exists, passing the event object
803839 if (hasEventHandler (" click" ))
@@ -833,7 +869,9 @@ namespace dom
833869 if (!shouldThrottleScrollEvent ())
834870 {
835871 last_scroll_event_time_ = chrono::steady_clock::now ();
836- dispatchEvent (make_shared<dom::Event>(DOMEventConstructorType::kEvent , DOMEventType::Scroll));
872+ auto scrollEvent = make_shared<dom::Event>(DOMEventConstructorType::kEvent , DOMEventType::Scroll);
873+ scrollEvent->setTarget (shared_from_this ());
874+ dispatchEvent (scrollEvent);
837875 }
838876 }
839877 return scrolled;
0 commit comments