/** * Verarbeitung des Drückens der Linken Maustaste. * * @param[in] mc Mauskoordinaten Struktur * * @author OLiver */ void WindowManager::Msg_LeftDown(MouseCoords mc) { // ist unser Desktop gültig? if(!desktop) return; // Sound abspielen LOADER.GetSoundN("sound", 112)->Play(255, false); // Ggf. Doppelklick untersuche unsigned time_now = VIDEODRIVER.GetTickCount(); if((time_now - last_left_click_time) * 1000 / CLOCKS_PER_SEC < DOUBLE_CLICK_INTERVAL && Point<int>(mc.x, mc.y) == last_left_click_point) mc.dbl_click = true; // Werte wieder erneut speichern last_left_click_point = Point<int>(mc.x, mc.y); last_left_click_time = time_now; // haben wir überhaupt fenster? if(windows.empty()) { // nein, dann Desktop aktivieren desktop->SetActive(true); // ist der Maus-Klick-Fix aktiv? if(!disable_mouse) { // nein, Msg_LeftDown aufrufen desktop->Msg_LeftDown(mc); // und allen unten drunter auch Bescheid sagen desktop->RelayMouseMessage(&Window::Msg_LeftDown, mc); } // und raus return; } // ist das zuletzt aktiv gewesene Fenster Modal? if( windows.back()->GetModal()) { // ja es ist modal, ist der Maus-Klick-Fix aktiv? if(!disable_mouse) { // nein, Msg_LeftDownaufrufen windows.back()->Msg_LeftDown(mc); // und allen unten drunter auch Bescheid sagen windows.back()->RelayMouseMessage(&Window::Msg_LeftDown, mc); // und noch MouseLeftDown vom Fenster aufrufen windows.back()->MouseLeftDown(mc); } // und raus return; } IngameWindow* foundWindow = FindWindowUnderMouse(mc); // aktives Fenster deaktivieren windows.back()->SetActive(false); // Haben wir ein Fenster gefunden gehabt? if(foundWindow){ // Fenster aus der Liste holen und vorne wieder anhängen windows.remove(foundWindow); windows.push_back(foundWindow); // aktivieren foundWindow->SetActive(true); // ist der Maus-Klick-Fix aktiv? if(!disable_mouse) { // nein, dann Msg_LeftDown aufrufen foundWindow->Msg_LeftDown(mc); // und allen unten drunter auch Bescheid sagen foundWindow->RelayMouseMessage(&Window::Msg_LeftDown, mc); // und noch MouseLeftDown vom Fenster aufrufen foundWindow->MouseLeftDown(mc); } // Desktop deaktivieren, falls aktiviert desktop->SetActive(false); }else{ // Desktop aktivieren desktop->SetActive(true); // ist der Maus-Klick-Fix aktiv? if(!disable_mouse) { // nein, dann Msg_LeftDown aufrufen desktop->Msg_LeftDown(mc); // und allen unten drunter auch Bescheid sagen desktop->RelayMouseMessage(&Window::Msg_LeftDown, mc);; } } }
/** * Verarbeitung des Drückens der Linken Maustaste. * * @param[in] mc Mauskoordinaten Struktur */ void WindowManager::Msg_LeftDown(MouseCoords mc) { // ist unser Desktop gültig? if(!curDesktop) return; // Sound abspielen LOADER.GetSoundN("sound", 112)->Play(255, false); // haben wir überhaupt fenster? if(windows.empty()) { // nein, dann Desktop aktivieren curDesktop->SetActive(true); // ist der Maus-Klick-Fix aktiv? if(!disable_mouse) { // nein, Msg_LeftDown aufrufen curDesktop->Msg_LeftDown(mc); // und allen unten drunter auch Bescheid sagen curDesktop->RelayMouseMessage(&Window::Msg_LeftDown, mc); } // und raus return; } // ist das zuletzt aktiv gewesene Fenster Modal? IngameWindow& lastActiveWnd = *windows.back(); if(lastActiveWnd.IsModal()) { if(!lastActiveWnd.IsActive()) lastActiveWnd.SetActive(); // ja es ist modal, ist der Maus-Klick-Fix aktiv? if(!disable_mouse) { // nein, Msg_LeftDownaufrufen lastActiveWnd.Msg_LeftDown(mc); // und allen unten drunter auch Bescheid sagen lastActiveWnd.RelayMouseMessage(&Window::Msg_LeftDown, mc); // und noch MouseLeftDown vom Fenster aufrufen lastActiveWnd.MouseLeftDown(mc); } // und raus return; } IngameWindow* foundWindow = FindWindowUnderMouse(mc); // aktives Fenster deaktivieren lastActiveWnd.SetActive(false); // Haben wir ein Fenster gefunden gehabt? if(foundWindow){ // Fenster aus der Liste holen und vorne wieder anhängen windows.remove(foundWindow); windows.push_back(foundWindow); // aktivieren foundWindow->SetActive(true); // ist der Maus-Klick-Fix aktiv? if(!disable_mouse) { // nein, dann Msg_LeftDown aufrufen foundWindow->Msg_LeftDown(mc); // und allen unten drunter auch Bescheid sagen foundWindow->RelayMouseMessage(&Window::Msg_LeftDown, mc); // und noch MouseLeftDown vom Fenster aufrufen foundWindow->MouseLeftDown(mc); } // Desktop deaktivieren, falls aktiviert curDesktop->SetActive(false); }else{ // Desktop aktivieren curDesktop->SetActive(true); // ist der Maus-Klick-Fix aktiv? if(!disable_mouse) { // nein, dann Msg_LeftDown aufrufen curDesktop->Msg_LeftDown(mc); // und allen unten drunter auch Bescheid sagen curDesktop->RelayMouseMessage(&Window::Msg_LeftDown, mc);; } } }