EventDispatcher *Stage::FindEventDispatcher(const wxPoint &inPoint) { // If a grab is in effect, return the element immediately. if (mGrabbedElement) return mGrabbedElement->GetEventDispatcher().get(); // Otherwise, look things up normally. ElementPtr elem = FindLightWeightElement(inPoint); if (elem && elem->GetEventDispatcher()) return elem->GetEventDispatcher().get(); else return GetEventDispatcher(); }
void Stage::MouseGrab(ElementPtr inElement) { ASSERT(inElement->IsLightWeight()); ASSERT(inElement->GetEventDispatcher().get()); if (mGrabbedElement) { std::string name(inElement->GetName().mb_str()); std::string grabbed_name(mGrabbedElement->GetName().mb_str()); gLog.Error("halyard.stage.grab", "Grabbing %s while %s is already grabbed", name.c_str(), grabbed_name.c_str()); MouseUngrab(mGrabbedElement); } mGrabbedElement = inElement; CaptureMouse(); }
void Stage::LeaveElement(ElementPtr inElement, const wxPoint &inPosition) { if (ShouldSendEvents()) { ASSERT(inElement->GetEventDispatcher().get()); inElement->GetEventDispatcher()->DoEventMouseLeave(inPosition); } }