コード例 #1
0
DWORD CGUIPage::OnGetObjectUnderCursor(DWORD size, void *params)
{
	OBJECTLIST::iterator olIter;
	IGUIElement *lesserGE = NULL;
	IGUIElement *newGE;
	OBJUNDERCURSOR *data;
	
	VERIFY_MESSAGE_SIZE(size, sizeof(OBJUNDERCURSOR));
	data = (OBJUNDERCURSOR*)params;

	float fCursorPosX = data->m_fPosX;
	float fCursorPosY = data->m_fPosY;

	data->m_Name = NULL;
	data->m_CompType = NULL;

	for(olIter = m_ObjectList.begin();
		olIter != m_ObjectList.end();
		olIter++)
	{
		newGE = dynamic_cast<IGUIElement*>(*olIter);
		if(!newGE)
		{	
			EngineGetToolBox()->SetErrorValue(ERR_NULL_POINTER);
			EngineGetToolBox()->Log(LOGERROR, _T("Could not grab IGUIElement from list of gui elements"));
			return MSG_ERROR;
		}
		if(newGE->IsCursorOver(fCursorPosX, fCursorPosY))
		{
			if(lesserGE==NULL)
			{	
				lesserGE = newGE;
			}
			else if( lesserGE->GetZOrder() > newGE->GetZOrder() )
			{
					lesserGE = newGE;
			}
		}
	}
	if(lesserGE)
	{
		data->m_Name = lesserGE->GetName();
		data->m_CompType = lesserGE->GetComponentType();
	}

	if(data->m_Name == NULL)
	{	
		return MSG_HANDLED_PROCEED;
	}
	else
	{
		return MSG_HANDLED_STOP;
	}

}
コード例 #2
0
void CGUIPage::SortGUIElements()
{
	IGUIElement *guiElement;
	OBJECTLIST::iterator olIter = m_ObjectList.begin();
	
	// clear sorted map
	m_SortedMap.clear();

	while(olIter != m_ObjectList.end())
	{
		guiElement = dynamic_cast<IGUIElement*>((*olIter));
		if(guiElement == NULL)
		{
			m_ToolBox->SetErrorValue(ERR_NULL_POINTER);
			m_ToolBox->Log(LOGERROR, _T("Could not cast to IGUIElement: %s"), (*olIter)->GetName());
			continue;
		}
		// insert gui element into sorted map
		m_SortedMap.insert(make_pair(guiElement->GetZOrder(), guiElement));		

		IHashString *type = guiElement->GetComponentType();		
		if (type)
		{
			static DWORD dwGroup = CHashString(_T("CGUIGroup")).GetUniqueID();
			if (type->GetUniqueID() == dwGroup)
			{
				CGUIGroup *group = dynamic_cast<CGUIGroup*>(guiElement);
				if (group)
				{
					group->SortElements();
				}
			}
		}

		olIter++;
	}
	
	// now clear object list
	m_ObjectList.clear();

	SORTEDGUIMAP::iterator sgmIter = m_SortedMap.begin();
	while(sgmIter != m_SortedMap.end())
	{
		// added the gui elements into the list in sorted order
		m_ObjectList.push_back(sgmIter->second);	
		sgmIter++;
	}
}