예제 #1
0
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();
}
예제 #2
0
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();
}