void MenuItem::MouseClicked(const MouseEvent& lEvent) { if(!IsParentMenuOpen()) { return; } SetHover(false); SetSelected(false); // Close the menu, since we have clicked this menu item Menu* lpParentMenu = (Menu* )GetParent(); lpParentMenu->CloseMenu(); // Make sure that we are inside the bounds of the parent menu if(lpParentMenu->GetPullDownMenuParent() != NULL) { int lTextHeight = m_pRenderer->GetFreeTypeTextHeight(lpParentMenu->GetPullDownMenuParent()->GetGUIFont(), "%s", lpParentMenu->GetMenuTitle().c_str()); int lMenuHeight = lTextHeight + (lpParentMenu->GetMenuItemSpacer() * 2); int lFullMenuDisplayHeight = lpParentMenu->GetPullDownMenuParent()->GetMaxNumItemsDisplayed() * lMenuHeight; Point location = lpParentMenu->GetPullDownMenuParent()->GetLocation(); for(Component* parent = lpParentMenu->GetPullDownMenuParent()->GetParent(); parent != 0;) { Point parentLocation = parent->GetLocation(); location.m_x += parentLocation.m_x; location.m_y += parentLocation.m_y; parent = parent->GetParent(); } int lMenuX = location.m_x; int lMenuY = location.m_y - lFullMenuDisplayHeight; int lMenuWidth = lpParentMenu->GetBiggestWidth()+ (lpParentMenu->GetMenuItemSpacer() * 2); if(lEvent.GetX() > lMenuX && lEvent.GetX() <= lMenuX+lMenuWidth && lEvent.GetY() > lMenuY && lEvent.GetY() <= lMenuY+lFullMenuDisplayHeight) { // Signal that we have pressed this menu item MenuItemPressed(); } } FocusManager::GetInstance()->SetFocusOwner(0); OnMouseClicked(); }
void MenuItem::MouseEntered(const MouseEvent& lEvent) { if(!IsParentMenuOpen()) { return; } Menu* lpParentMenu = (Menu* )GetParent(); // Make sure that we are inside the bounds of the parent menu if(lpParentMenu->GetPullDownMenuParent() != NULL) { int lTextHeight = m_pRenderer->GetFreeTypeTextHeight(lpParentMenu->GetPullDownMenuParent()->GetGUIFont(), "%s", lpParentMenu->GetMenuTitle().c_str()); int lMenuHeight = lTextHeight + (lpParentMenu->GetMenuItemSpacer() * 2); int lFullMenuDisplayHeight = lpParentMenu->GetPullDownMenuParent()->GetMaxNumItemsDisplayed() * lMenuHeight; Point location = lpParentMenu->GetPullDownMenuParent()->GetLocation(); for(Component* parent = lpParentMenu->GetPullDownMenuParent()->GetParent(); parent != 0;) { Point parentLocation = parent->GetLocation(); location.m_x += parentLocation.m_x; location.m_y += parentLocation.m_y; parent = parent->GetParent(); } int lMenuX = location.m_x; int lMenuY = location.m_y - lFullMenuDisplayHeight; int lMenuWidth = lpParentMenu->GetBiggestWidth()+ (lpParentMenu->GetMenuItemSpacer() * 2); if(lEvent.GetX() > lMenuX && lEvent.GetX() <= lMenuX+lMenuWidth && lEvent.GetY() > lMenuY && lEvent.GetY() <= lMenuY+lFullMenuDisplayHeight) { SetHover(true); OnMouseEnter(); } } }