void CNOutBarCtrl::OnLButtonDown(UINT nFlags, CPoint point) { if (GetFocus() != this) SetFocus(); OnMouseMove(nFlags, point); int obj = HITOBJ(lastHit); int index = HITINDEX(lastHit); CClientDC dc(this); pressedHit = lastHit; if (obj == HT_FOLDER) drawFolder(&dc, index, TRUE); else if (obj == HT_ITEM) { dragItem = index; hilightItem(&dc, index, TRUE); } else if (obj == HT_SCROLL) { SetTimer(IDT_SCROLL, 50, NULL); drawScroll(&dc, index, TRUE); } CWnd::OnLButtonDown(nFlags, point); }
// Scroll down void Menu::scrollDown() { if(mNumItems == 0) return; dimItem(mSelection); mSelection++; if(mSelection > mNumItems-1) mSelection = 0; hilightItem(mSelection); SoundSystem::getSingleton().playSound("menumove"); }
// Scroll up void Menu::scrollUp() { if(mNumItems == 0) return; dimItem(mSelection); mSelection--; if(mSelection < 0) mSelection = mNumItems-1; hilightItem(mSelection); SoundSystem::getSingleton().playSound("menumove"); }
// Load a menu void Menu::setMenu(const String &menu, int selection) { static bool firstTime = true; mMenuName = menu; mNumItems = findMenuItems(); mSelection = selection; mNewState = -1; // Set the colors MaterialPtr mat = MaterialManager::getSingleton().getByName("BlockCenter"); mat->getTechnique(0)->getPass(0)->getTextureUnitState(0)->setAlphaOperation(LBX_MODULATE, LBS_TEXTURE, LBS_MANUAL, 1.0f, 0.5f); mat = MaterialManager::getSingleton().getByName("BlockBorder"); mat->getTechnique(0)->getPass(0)->getTextureUnitState(0)->setAlphaOperation(LBX_MODULATE, LBS_TEXTURE, LBS_MANUAL, 1.0f, 0.5f); for(int f=0; f<mNumItems; f++) dimItem(f); hilightItem(mSelection); // Black and White on Viewport *vp = gameApp->getRenderWindow()->getViewport(0); CompositorManager::getSingleton().setCompositorEnabled(vp, "B&W", true); // Scroller on OverlayManager::getSingleton().getByName("MenuScroller")->show(); // Show the menu show(); // Load the background if(firstTime && menu == "MainMenu") { gameApp->loadLevel("menubg.lua"); // Load the high scores hiscoreList.load(getHiscoreLocation(true)); firstTime = false; // Update the version string TextAreaOverlayElement *ver = static_cast<TextAreaOverlayElement*>(OverlayManager::getSingleton().getOverlayElement("VersionText")); ver->setCaption("v" VERSION); } // Update the options menu if(menu == "GameOptions") prepareOptionsItems(); else if(menu == "HighScores") hiscoreList.updateOverlay(); else if(menu == "TitleScreen") titleAlpha = 0.0f; else if(menu == "MainMenu") OverlayManager::getSingleton().getByName("Version")->show(); }
void CNOutBarCtrl::OnMouseMove(UINT nFlags, CPoint point) { HIT hit = hitTest(point); if (hit != lastHit) { int newObj = HITOBJ(hit); int newIndex = HITINDEX(hit); if (!editCtrl) { CClientDC dc(this); int obj = HITOBJ(lastHit); int index = HITINDEX(lastHit); if (obj == HT_FOLDER) drawFolder(&dc, index, FALSE, FALSE); else if (obj == HT_ITEM) drawItem(&dc, index, TRUE); else if (obj == HT_SCROLL && HITOBJ(pressedHit) == HT_SCROLL) { drawScroll(&dc, index); KillTimer(IDT_SCROLL); } if (newObj == HT_FOLDER) drawFolder(&dc, newIndex, hit == pressedHit, TRUE); else { if (newObj == HT_ITEM) hilightItem(&dc, newIndex, hit == pressedHit); } } lastHit = hit; if (dragItem >= 0) { if (newObj == HT_FOLDER && selFolder != newIndex) currentCursor = dragCursor; else currentCursor = forbiddenCursor; } else if (newObj == HT_FOLDER) currentCursor = handCursor; else currentCursor = NULL; } CWnd::OnMouseMove(nFlags, point); }
void CNOutBarCtrl::OnLButtonUp(UINT nFlags, CPoint point) { OnMouseMove(nFlags, point); int obj = HITOBJ(lastHit); int index = HITINDEX(lastHit); if (dragItem >= 0) { if (obj == HT_FOLDER) { currentCursor = handCursor; if (listener && selFolder != index) listener->itemDragged(dragItem, index); } else currentCursor = NULL; dragItem = -1; } CClientDC dc(this); if (pressedHit == lastHit) { if (obj == HT_FOLDER) { if (index == selFolder) drawFolder(&dc, index); else { if (listener) { listener->selFolderChanged(selFolder); animateFolder(selFolder, index); } } } else if (obj == HT_ITEM) { hilightItem(&dc, index, FALSE); clickedItem = index; SetTimer(IDT_DBLCLK, 300, NULL); } else if (obj == HT_SCROLL) { drawScroll(&dc, index); KillTimer(IDT_SCROLL); } } pressedHit = HITNONE; CWnd::OnLButtonUp(nFlags, point); }
void CNOutBarCtrl::drawAll(CDC *pDC) { CDC memDC; memDC.CreateCompatibleDC(pDC); CRect rcClient; GetClientRect(rcClient); CBitmap bm; bm.CreateCompatibleBitmap(pDC, rcClient.Width(), rcClient.Height()); CBitmap *oldBitmap = memDC.SelectObject(&bm); int obj = HITOBJ(lastHit); int index = HITINDEX(lastHit); int i; for (i = folders.size() - 1; i >= 0; i--) drawFolder(&memDC, i, FALSE, (obj == HT_FOLDER && index == i)); CRect rc; getInsideRect(rc); drawBackground(&memDC, rc); CRgn rgn; rgn.CreateRectRgnIndirect(rc); memDC.SelectClipRgn(&rgn); int max = getMaxVisibleItem(); for (i = scrollPos(); i <= max; i++) drawItem(&memDC, i); if (obj == HT_ITEM) hilightItem(&memDC, index, FALSE); for (i = 1; i >= 0; i--) { if (canScroll(i)) drawScroll(&memDC, i, pressedHit == MAKEHIT(HT_SCROLL, i)); } pDC->BitBlt(0, 0, rcClient.Width(), rcClient.Height(), &memDC, 0, 0, SRCCOPY); memDC.SelectObject(oldBitmap); }