//[-------------------------------------------------------] //[ Protected virtual PLGui::GuiApplication functions ] //[-------------------------------------------------------] void Application::OnCreateMainWindow() { // [sbusch] // String sDir = Url(sFilename).CutFilename(); // System::GetInstance()->SetCurrentDir(sDir); // LoadableManager::GetInstance()->AddBaseDir(sDir); // Get GUI Gui *pGui = Gui::GetSystemGui(); // List screens System::GetInstance()->GetConsole().Print("Screens:\n"); for (uint32 i=0; i<pGui->GetScreens().GetNumOfElements(); i++) { Screen *pScreen = pGui->GetScreens().Get(i); String sName = pScreen->GetName(); Vector2i vSize = pScreen->GetSize(); Vector2i vPos = pScreen->GetPos(); bool bDefault = pScreen->IsDefault(); System::GetInstance()->GetConsole().Print( String("- ") + sName + " [" + vSize.x + 'x' + vSize.y +']' + " (" + vPos .x + ',' + vPos .y + ')' + (bDefault ? " (*)" : "") + '\n'); } // Create window TestWindow *pWindow = new TestWindow(); // pWindow->SetFullscreenEnabled(true); pWindow->SetPos(Vector2i(0, 0)); pWindow->SetSize(Vector2i(640, 480)); pWindow->Center(CenterScreen); pWindow->SetVisible(true); // Add modifiers pWindow->AddModifier("PLGui::ModClose", "ExitApplication=1"); // pWindow->AddModifier("PLGui::ModBlend", ""); // Set main window SetMainWindow(pWindow); }
/** * @brief * Center widget relative to the screen */ void Widget::CenterOnScreen(Screen &cScreen) { // Widget and screen must belong to the same GUI if (GetGui() == cScreen.GetGui()) { // Get sizes Vector2i vSize = GetSize(); Vector2i vScreen = cScreen.GetSize(); // Get relative position Vector2i vRelative = GetAbsPos() - cScreen.GetPos(); // Get desired relative position Vector2i vDesired; vDesired.x = (vScreen.width - vSize.width) / 2; vDesired.y = (vScreen.height - vSize.height) / 2; // Set new position Vector2i vPos = GetPos() + vDesired - vRelative; SetPos(vPos); } }
/** * @brief * Get screen the widget is on */ Screen *Widget::GetScreen() const { // Get current position Vector2i vPos = GetAbsPos(); // Check all screens for (uint32 i=0; i<GetGui()->GetScreens().GetNumOfElements(); i++) { // Get screen, position and size Screen *pScreen = GetGui()->GetScreens().Get(i); Vector2i vScreenPos = pScreen->GetPos(); Vector2i vScreenSize = pScreen->GetSize(); // Check if widget is inside that screen if (vPos.x >= vScreenPos.x && vPos.x < vScreenPos.x + vScreenSize.x && vPos.y >= vScreenPos.y && vPos.y < vScreenPos.y + vScreenSize.y) { // Screen found return pScreen; } } // ERROR, no screen found return nullptr; }