viewer: re-implemented auto viewer full screen from menubar/keyboard shortcut
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
@@ -27,6 +27,11 @@ public:
|
||||
|
||||
void ConnectPixelSamplerPanel(PixelSamplerPanel *psp);
|
||||
|
||||
/**
|
||||
* @brief Wrapper for ViewerWidget::SetFullScreen()
|
||||
*/
|
||||
void SetFullScreen(QScreen* screen = nullptr);
|
||||
|
||||
};
|
||||
|
||||
#endif // VIEWERPANELBASE_H
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -142,6 +142,8 @@ private slots:
|
||||
|
||||
void SetMarkerTriggered();
|
||||
|
||||
void FullScreenViewerTriggered();
|
||||
|
||||
private:
|
||||
/**
|
||||
* @brief Set strings based on the current application language.
|
||||
|
||||
Reference in New Issue
Block a user