bool CGUIWindowSettingsScreenCalibration::OnAction(const CAction &action) { switch (action.GetID()) { case ACTION_CALIBRATE_SWAP_ARROWS: { NextControl(); return true; } break; case ACTION_CALIBRATE_RESET: { CGUIDialogYesNo* pDialog = CServiceBroker::GetGUI()->GetWindowManager().GetWindow<CGUIDialogYesNo>(WINDOW_DIALOG_YES_NO); pDialog->SetHeading(CVariant{20325}); std::string strText = StringUtils::Format(g_localizeStrings.Get(20326).c_str(), CServiceBroker::GetWinSystem()->GetGfxContext().GetResInfo(m_Res[m_iCurRes]).strMode.c_str()); pDialog->SetLine(0, CVariant{std::move(strText)}); pDialog->SetLine(1, CVariant{20327}); pDialog->SetChoice(0, CVariant{222}); pDialog->SetChoice(1, CVariant{186}); pDialog->Open(); if (pDialog->IsConfirmed()) { CServiceBroker::GetWinSystem()->GetGfxContext().ResetScreenParameters(m_Res[m_iCurRes]); ResetControls(); } return true; } break; case ACTION_CHANGE_RESOLUTION: // choose the next resolution in our list { m_iCurRes = (m_iCurRes+1) % m_Res.size(); CServiceBroker::GetWinSystem()->GetGfxContext().SetVideoResolution(m_Res[m_iCurRes], false); ResetControls(); return true; } break; // ignore all gesture meta actions case ACTION_GESTURE_BEGIN: case ACTION_GESTURE_END: case ACTION_GESTURE_ABORT: case ACTION_GESTURE_NOTIFY: case ACTION_GESTURE_PAN: case ACTION_GESTURE_ROTATE: case ACTION_GESTURE_ZOOM: return true; } // if we see a mouse move event without dx and dy (amount2 and amount3) these // are the focus actions which are generated on touch events and those should // be eaten/ignored here. Else we will switch to the screencalibration controls // which are at that x/y value on each touch/tap/swipe which makes the whole window // unusable for touch screens if (action.GetID() == ACTION_MOUSE_MOVE && action.GetAmount(2) == 0 && action.GetAmount(3) == 0) return true; return CGUIWindow::OnAction(action); // base class to handle basic movement etc. }
bool CGUIWindowSettingsScreenCalibration::OnMessage(CGUIMessage& message) { switch ( message.GetMessage() ) { case GUI_MSG_WINDOW_DEINIT: { CDisplaySettings::GetInstance().UpdateCalibrations(); CSettings::GetInstance().Save(); g_graphicsContext.SetCalibrating(false); g_windowManager.ShowOverlay(OVERLAY_STATE_SHOWN); // reset our screen resolution to what it was initially g_graphicsContext.SetVideoResolution(CDisplaySettings::GetInstance().GetCurrentResolution()); // Inform the player so we can update the resolution #ifdef HAS_VIDEO_PLAYBACK g_renderManager.Update(); #endif g_windowManager.SendMessage(GUI_MSG_NOTIFY_ALL, 0, 0, GUI_MSG_WINDOW_RESIZE); } break; case GUI_MSG_WINDOW_INIT: { CGUIWindow::OnMessage(message); g_windowManager.ShowOverlay(OVERLAY_STATE_HIDDEN); g_graphicsContext.SetCalibrating(true); // Get the allowable resolutions that we can calibrate... m_Res.clear(); if (g_application.m_pPlayer->IsPlayingVideo()) { // don't allow resolution switching if we are playing a video #ifdef HAS_VIDEO_PLAYBACK RESOLUTION res = g_renderManager.GetResolution(); g_graphicsContext.SetVideoResolution(res); // Inform the renderer so we can update the resolution g_renderManager.Update(); #endif m_iCurRes = 0; m_Res.push_back(g_graphicsContext.GetVideoResolution()); SET_CONTROL_VISIBLE(CONTROL_VIDEO); } else { SET_CONTROL_HIDDEN(CONTROL_VIDEO); m_iCurRes = (unsigned int)-1; g_graphicsContext.GetAllowedResolutions(m_Res); // find our starting resolution m_iCurRes = FindCurrentResolution(); } if (m_iCurRes==(unsigned int)-1) { CLog::Log(LOGERROR, "CALIBRATION: Reported current resolution: %d", (int)g_graphicsContext.GetVideoResolution()); CLog::Log(LOGERROR, "CALIBRATION: Could not determine current resolution, falling back to default"); m_iCurRes = 0; } // Setup the first control m_iControl = CONTROL_TOP_LEFT; ResetControls(); return true; } break; case GUI_MSG_CLICKED: { // clicked - change the control... NextControl(); } break; case GUI_MSG_NOTIFY_ALL: { if (message.GetParam1() == GUI_MSG_WINDOW_RESIZE) { m_iCurRes = FindCurrentResolution(); } } break; // send before touch for requesting gesture features - we don't want this // it would result in unfocus in the onmessage below ... case GUI_MSG_GESTURE_NOTIFY: // send after touch for unfocussing - we don't want this in this window! case GUI_MSG_UNFOCUS_ALL: return true; break; } return CGUIWindow::OnMessage(message); }
bool CGUIWindowSettingsScreenCalibration::OnMessage(CGUIMessage& message) { switch ( message.GetMessage() ) { case GUI_MSG_WINDOW_DEINIT: { CDisplaySettings::GetInstance().UpdateCalibrations(); CServiceBroker::GetSettings()->Save(); CServiceBroker::GetWinSystem()->GetGfxContext().SetCalibrating(false); // reset our screen resolution to what it was initially CServiceBroker::GetWinSystem()->GetGfxContext().SetVideoResolution(CDisplaySettings::GetInstance().GetCurrentResolution(), false); CServiceBroker::GetGUI()->GetWindowManager().SendMessage(GUI_MSG_NOTIFY_ALL, 0, 0, GUI_MSG_WINDOW_RESIZE); } break; case GUI_MSG_WINDOW_INIT: { CGUIWindow::OnMessage(message); CServiceBroker::GetWinSystem()->GetGfxContext().SetCalibrating(true); // Get the allowable resolutions that we can calibrate... m_Res.clear(); if (g_application.GetAppPlayer().IsPlayingVideo()) { // don't allow resolution switching if we are playing a video g_application.GetAppPlayer().TriggerUpdateResolution(); m_iCurRes = 0; m_Res.push_back(CServiceBroker::GetWinSystem()->GetGfxContext().GetVideoResolution()); SET_CONTROL_VISIBLE(CONTROL_VIDEO); } else { SET_CONTROL_HIDDEN(CONTROL_VIDEO); m_iCurRes = (unsigned int)-1; CServiceBroker::GetWinSystem()->GetGfxContext().GetAllowedResolutions(m_Res); // find our starting resolution m_iCurRes = FindCurrentResolution(); } if (m_iCurRes==(unsigned int)-1) { CLog::Log(LOGERROR, "CALIBRATION: Reported current resolution: %d", (int)CServiceBroker::GetWinSystem()->GetGfxContext().GetVideoResolution()); CLog::Log(LOGERROR, "CALIBRATION: Could not determine current resolution, falling back to default"); m_iCurRes = 0; } // Setup the first control m_iControl = CONTROL_TOP_LEFT; ResetControls(); return true; } break; case GUI_MSG_CLICKED: { // clicked - change the control... NextControl(); } break; case GUI_MSG_NOTIFY_ALL: { if (message.GetParam1() == GUI_MSG_WINDOW_RESIZE) { m_iCurRes = FindCurrentResolution(); } } break; // send before touch for requesting gesture features - we don't want this // it would result in unfocus in the onmessage below ... case GUI_MSG_GESTURE_NOTIFY: // send after touch for unfocussing - we don't want this in this window! case GUI_MSG_UNFOCUS_ALL: return true; break; } return CGUIWindow::OnMessage(message); }