Skip to content

Commit

Permalink
QVTKOpenGLWidget: Set screen size on render window
Browse files Browse the repository at this point in the history
QVTKOpenGLWidget requires using vtkGenericOpenGLRenderWindow. The
vtkWindow interface requires implementing GetScreenSize() to return the
size of the screen in pixels.

This commit makes QVTKOpenGLWidget responsible for determining the
size of its screen and setting that size on its
vtkGenericOpenGLRenderWindow.
  • Loading branch information
msmolens committed Jul 26, 2017
1 parent 236a185 commit e0c60b1
Show file tree
Hide file tree
Showing 4 changed files with 25 additions and 1 deletion.
6 changes: 6 additions & 0 deletions GUISupport/Qt/QVTKOpenGLWidget.cxx
Expand Up @@ -14,6 +14,8 @@
=========================================================================*/
#include "QVTKOpenGLWidget.h"

#include <QApplication>
#include <QDesktopWidget>
#include <QMouseEvent>
#include <QOpenGLContext>
#include <QOpenGLDebugLogger>
Expand Down Expand Up @@ -339,6 +341,10 @@ void QVTKOpenGLWidget::recreateFBO()
this->RenderWindow->SetSize(deviceSize.width(), deviceSize.height());
this->RenderWindow->SetPosition(this->x() * devicePixelRatio_, this->y() * devicePixelRatio_);

// Set screen size on render window.
const QRect screenGeometry = QApplication::desktop()->screenGeometry(this);
this->RenderWindow->SetScreenSize(screenGeometry.width(), screenGeometry.height());

this->FBO = new QOpenGLFramebufferObject(deviceSize, format);
this->FBO->bind();
this->RenderWindow->SetForceMaximumHardwareLineWidth(1);
Expand Down
10 changes: 10 additions & 0 deletions GUISupport/Qt/Testing/Cxx/TestQVTKOpenGLWidget.cxx
Expand Up @@ -62,6 +62,16 @@ int TestQVTKOpenGLWidget(int argc, char* argv[])
actor->SetMapper(mapper.Get());
ren->AddActor(actor.Get());

int* windowSize = window->GetSize();
int* screenSize = window->GetScreenSize();
if (screenSize[0] < windowSize[0] || screenSize[1] < windowSize[1])
{
std::cout << "Expected vtkGenericOpenGLRenderWindow::GetScreenSize() "
"dimensions to be larger than the render window size"
<< std::endl;
return EXIT_FAILURE;
}

vtktesting->SetRenderWindow(window.Get());
widget.update();
app.processEvents();
Expand Down
4 changes: 3 additions & 1 deletion Rendering/OpenGL2/vtkGenericOpenGLRenderWindow.cxx
Expand Up @@ -30,6 +30,8 @@ vtkGenericOpenGLRenderWindow::vtkGenericOpenGLRenderWindow()
this->CurrentStatus = false;
this->SupportsOpenGLStatus = 0;
this->ForceMaximumHardwareLineWidth = 0;
this->ScreenSize[0] = 0;
this->ScreenSize[1] = 0;
}

vtkGenericOpenGLRenderWindow::~vtkGenericOpenGLRenderWindow()
Expand Down Expand Up @@ -170,7 +172,7 @@ void vtkGenericOpenGLRenderWindow::SetParentInfo(char*)

int* vtkGenericOpenGLRenderWindow::GetScreenSize()
{
return nullptr;
return this->ScreenSize;
}

void vtkGenericOpenGLRenderWindow::Start()
Expand Down
6 changes: 6 additions & 0 deletions Rendering/OpenGL2/vtkGenericOpenGLRenderWindow.h
Expand Up @@ -151,12 +151,18 @@ class VTKRENDERINGOPENGL2_EXPORT vtkGenericOpenGLRenderWindow :
vtkSetMacro(ReadyForRendering, bool);
vtkGetMacro(ReadyForRendering, bool);

/**
* Set the size of the screen in pixels.
*/
vtkSetVector2Macro(ScreenSize,int);

protected:
int DirectStatus;
int SupportsOpenGLStatus;
bool CurrentStatus;
float ForceMaximumHardwareLineWidth;
bool ReadyForRendering;
int ScreenSize[2];

private:
vtkGenericOpenGLRenderWindow(const vtkGenericOpenGLRenderWindow&) VTK_DELETE_FUNCTION;
Expand Down

0 comments on commit e0c60b1

Please sign in to comment.