viewer: re-implemented auto viewer full screen from menubar/keyboard shortcut

This commit is contained in:
itsmattkc
2020-04-01 19:22:53 +11:00
parent ed48d24cbc
commit 1319d7141f
6 changed files with 63 additions and 21 deletions
+5
View File
@@ -53,3 +53,8 @@ void ViewerPanelBase::ConnectPixelSamplerPanel(PixelSamplerPanel *psp)
connect(psp, &PixelSamplerPanel::visibilityChanged, vw, &ViewerWidget::SetSignalCursorColorEnabled);
connect(vw, &ViewerWidget::CursorColor, psp, &PixelSamplerPanel::SetValues);
}
void ViewerPanelBase::SetFullScreen(QScreen *screen)
{
static_cast<ViewerWidget*>(GetTimeBasedWidget())->SetFullScreen(screen);
}
+5
View File
@@ -27,6 +27,11 @@ public:
void ConnectPixelSamplerPanel(PixelSamplerPanel *psp);
/**
* @brief Wrapper for ViewerWidget::SetFullScreen()
*/
void SetFullScreen(QScreen* screen = nullptr);
};
#endif // VIEWERPANELBASE_H
+37 -19
View File
@@ -275,6 +275,40 @@ void ViewerWidget::SetMatrix(const QMatrix4x4 &mat)
}
}
void ViewerWidget::SetFullScreen(QScreen *screen)
{
if (!screen) {
// Try to find the screen that contains the mouse cursor currently
foreach (QScreen* test, QGuiApplication::screens()) {
if (test->geometry().contains(QCursor::pos())) {
screen = test;
break;
}
}
// Fallback, just use the first screen
if (!screen) {
screen = QGuiApplication::screens().first();
}
}
ViewerWindow* vw = new ViewerWindow(this);
vw->showFullScreen();
vw->setGeometry(screen->geometry());
vw->gl_widget()->ConnectColorManager(main_gl_widget()->color_manager());
main_gl_widget()->ConnectSibling(vw->gl_widget());
connect(vw, &ViewerWindow::destroyed, this, &ViewerWidget::WindowAboutToClose);
connect(vw->gl_widget(), &ViewerGLWidget::customContextMenuRequested, this, &ViewerWidget::ShowContextMenu);
if (GetConnectedNode()) {
vw->SetResolution(GetConnectedNode()->video_params().width(), GetConnectedNode()->video_params().height());
}
windows_.append(vw);
gl_widgets_.append(vw->gl_widget());
}
VideoRenderBackend *ViewerWidget::video_renderer() const
{
return video_renderer_;
@@ -379,25 +413,9 @@ void ViewerWidget::UpdateStack()
}
}
void ViewerWidget::SetFullScreenDisplay(QAction *action)
void ViewerWidget::ContextMenuSetFullScreen(QAction *action)
{
QScreen* target = QGuiApplication::screens().at(action->data().toInt());
ViewerWindow* vw = new ViewerWindow(this);
vw->showFullScreen();
vw->setGeometry(target->geometry());
vw->gl_widget()->ConnectColorManager(main_gl_widget()->color_manager());
main_gl_widget()->ConnectSibling(vw->gl_widget());
connect(vw, &ViewerWindow::destroyed, this, &ViewerWidget::WindowAboutToClose);
connect(vw->gl_widget(), &ViewerGLWidget::customContextMenuRequested, this, &ViewerWidget::ShowContextMenu);
if (GetConnectedNode()) {
vw->SetResolution(GetConnectedNode()->video_params().width(), GetConnectedNode()->video_params().height());
}
windows_.append(vw);
gl_widgets_.append(vw->gl_widget());
SetFullScreen(QGuiApplication::screens().at(action->data().toInt()));
}
void ViewerWidget::WindowAboutToClose()
@@ -515,7 +533,7 @@ void ViewerWidget::ShowContextMenu(const QPoint &pos)
a->setData(i);
}
connect(full_screen_menu, &QMenu::triggered, this, &ViewerWidget::SetFullScreenDisplay);
connect(full_screen_menu, &QMenu::triggered, this, &ViewerWidget::ContextMenuSetFullScreen);
menu.exec(static_cast<QWidget*>(sender())->mapToGlobal(pos));
}
+8 -1
View File
@@ -71,6 +71,13 @@ public:
void SetMatrix(const QMatrix4x4& mat);
/**
* @brief Creates a ViewerWindow widget and places it full screen on another screen
*
* If `screen` is nullptr, the screen will be automatically selected as whichever one contains the mouse cursor.
*/
void SetFullScreen(QScreen* screen = nullptr);
VideoRenderBackend* video_renderer() const;
public slots:
@@ -221,7 +228,7 @@ private slots:
void UpdateStack();
void SetFullScreenDisplay(QAction* action);
void ContextMenuSetFullScreen(QAction* action);
void WindowAboutToClose();
+6 -1
View File
@@ -164,7 +164,7 @@ MainMenu::MainMenu(QMainWindow *parent) :
view_full_screen_item_ = view_menu_->AddItem("fullscreen", parent, SLOT(SetFullscreen(bool)), "F11");
view_full_screen_item_->setCheckable(true);
view_full_screen_viewer_item_ = view_menu_->AddItem("fullscreenviewer", nullptr, nullptr);
view_full_screen_viewer_item_ = view_menu_->AddItem("fullscreenviewer", this, SLOT(FullScreenViewerTriggered()));
//
// PLAYBACK MENU
@@ -509,6 +509,11 @@ void MainMenu::SetMarkerTriggered()
PanelManager::instance()->CurrentlyFocused()->SetMarker();
}
void MainMenu::FullScreenViewerTriggered()
{
PanelManager::instance()->MostRecentlyFocused<ViewerPanel>()->SetFullScreen();
}
void MainMenu::Retranslate()
{
// MenuShared is not a QWidget and therefore does not receive a LanguageEvent, we use MainMenu's to update it
+2
View File
@@ -142,6 +142,8 @@ private slots:
void SetMarkerTriggered();
void FullScreenViewerTriggered();
private:
/**
* @brief Set strings based on the current application language.