void Stage::MouseUngrab(ElementPtr inElement) { ASSERT(inElement->IsLightWeight()); if (!mGrabbedElement) { std::string name(inElement->GetName().mb_str()); gLog.Error("halyard.stage.grab", "Ungrabbing %s when it isn't grabbed", name.c_str()); return; } if (inElement != mGrabbedElement) { std::string name(inElement->GetName().mb_str()); std::string grabbed_name(mGrabbedElement->GetName().mb_str()); gLog.Error("halyard.stage.grab", "Ungrabbing %s when %s is grabbed", name.c_str(), grabbed_name.c_str()); } // Force updating of the current element, cursor, etc. if (mCurrentElement != mGrabbedElement) mCurrentElement = ElementPtr(); // Release our grab. mGrabbedElement = ElementPtr(); ReleaseMouse(); UpdateCurrentElementAndCursor(); }
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(); }