Orphaned widgets won't get stuck.

--HG--
branch : dfighter-tools
This commit is contained in:
dfighter1985 2014-09-24 20:40:37 +02:00
parent bd7cb1eea3
commit e7ab56beea

View file

@ -2410,20 +2410,45 @@ namespace NLGUI
// This may happen when alt-tab has been used => the sheet is dragged but the left button is up // This may happen when alt-tab has been used => the sheet is dragged but the left button is up
if (!CCtrlDraggable::getDraggedSheet()) if (!CCtrlDraggable::getDraggedSheet())
{ {
// Take the top most control.
uint nMaxDepth = 0; if( CInterfaceElement::getEditorMode() )
const std::vector< CCtrlBase* >& _CtrlsUnderPointer = getCtrlsUnderPointer();
for (sint32 i = (sint32)_CtrlsUnderPointer.size()-1; i >= 0; i--)
{ {
CCtrlBase *ctrl= _CtrlsUnderPointer[i]; std::vector< NLMISC::CRefPtr< CInterfaceElement > >::reverse_iterator itr = _OrphanElements.rbegin();
if (ctrl && ctrl->isCapturable() && ctrl->isInGroup( pNewCurrentWnd ) ) while( itr != _OrphanElements.rend() )
{ {
uint d = ctrl->getDepth( pNewCurrentWnd ); CInterfaceElement *e = *itr;
if (d > nMaxDepth)
int x = getPointer()->getXReal();
int y = getPointer()->getYReal();
if( e->isIn( x, y ) )
{ {
nMaxDepth = d; _CapturedView = static_cast< CViewBase* >( e );
setCapturePointerLeft( ctrl );
captured = true; captured = true;
break;
}
++itr;
}
}
if( !captured )
{
// Take the top most control.
uint nMaxDepth = 0;
const std::vector< CCtrlBase* >& _CtrlsUnderPointer = getCtrlsUnderPointer();
for (sint32 i = (sint32)_CtrlsUnderPointer.size()-1; i >= 0; i--)
{
CCtrlBase *ctrl= _CtrlsUnderPointer[i];
if (ctrl && ctrl->isCapturable() && ctrl->isInGroup( pNewCurrentWnd ) )
{
uint d = ctrl->getDepth( pNewCurrentWnd );
if (d > nMaxDepth)
{
nMaxDepth = d;
setCapturePointerLeft( ctrl );
captured = true;
}
} }
} }
} }
@ -2674,23 +2699,22 @@ namespace NLGUI
if( draggedElement != NULL ) if( draggedElement != NULL )
{ {
CInterfaceGroup *g = getGroupUnder( draggedElement->getXReal(), draggedElement->getYReal() ); CInterfaceGroup *g = getGroupUnder( draggedElement->getXReal(), draggedElement->getYReal() );
CInterfaceElement *e = draggedElement;
e->setParent( g );
e->setIdRecurse( e->getShortId() );
e->setParentPos( g );
e->setParentSize( g );
if( g != NULL ) if( g != NULL )
{ {
CInterfaceElement *e = draggedElement;
e->setName( "=MARKED=" );
e->setParent( g );
e->setIdRecurse( e->getShortId() );
g->addElement( e ); g->addElement( e );
e->setParentPos( g );
e->setParentSize( g );
checkCoords();
} }
else else
_OrphanElements.push_back( draggedElement ); _OrphanElements.push_back( draggedElement );
checkCoords();
draggedElement = NULL; draggedElement = NULL;
} }
} }