title: Keeping aspect ratio when resizing in OpenGL
body: <p>I implemented the following code:</p>
  
  <pre><code>void TestGlPlot::resizeGL(int width, int height) 
  {
     setupViewport(width, height);
  }
  
  void TestGlPlot::setupViewport(int width, int height)
  {
     /* Prevent divide by zero --------------------------------------------------------------------*/
     if (height == 0) height = 1;
     /* Calculate aspect ratio --------------------------------------------------------------------*/
     float aspectRatio = (float)width / (float)height;
  
     /* Set viewport to cover the window ----------------------------------------------------------*/
     glViewport(0, 0, width, height);
  
     /* Set aspect ratio --------------------------------------------------------------------------*/
     glMatrixMode(GL_PROJECTION); /* switch to projection matrix */
     glLoadIdentity();
     /*
     if (width &gt;= height)
     {
     gluOrtho2D(-0.5*aspectRatio, 0.5*aspectRatio, 0.0, 1.0);
     }
     else
     {
     gluOrtho2D(-0.5, 0.5, 0.0*aspectRatio, 1.0*aspectRatio);
     }
     glMatrixMode(GL_MODELVIEW);
     */
     gluOrtho2D(-1, 1, 0.0, 1.0);
     glMatrixMode(GL_MODELVIEW);
  }
  
  void TestGlPlot::paintEvent(QPaintEvent *event) {
     makeCurrent();
     setupViewport(width(), height());
  
     glMatrixMode(GL_MODELVIEW);
  
     /* Set white background ----------------------------------------------------------------------*/
     glClear(GL_COLOR_BUFFER_BIT);
     glClearColor(255,255,255,0);
  
     /* Paint OpenGL events -----------------------------------------------------------------------*/
     glColor4f(1.0, 0.0, 0.0, 1.0);
  
     /* light grey */
     glColor4f(0.0, 0.0, 0.0, 0.3); 
     gluPartialDisk(plainQuad, 0.1, 1, 20, 4, -60, 120);
  
     /* Paint QPainter events ---------------------------------------------------------------------*/
     QPainter painter(this);
  
     /* Draw grey border around plot --------------------------------------------------------------*/
     painter.setPen(QColor("#808080"));
     painter.drawRect(0, 0, width()-1, height()-1);
  
     painter.setFont(font);
  
     /* Translate coordinate system to (0,0) center -----------------------------------------------*/
     QMatrix m;
     m.translate(width()*0.5, height()*0.5);   
     painter.setMatrix(m);
  
     /* Left side descriptions for radius ---------------------------------------------------------*/
     painter.drawText(-0.17*width(), 0.38*height(), tr("100m"));
     painter.drawText(-0.27*width(), 0.28*height(), tr("200m"));
     painter.drawText(-0.37*width(), 0.18*height(), tr("300m"));
     painter.drawText(-0.47*width(), 0.08*height(), tr("400m"));
  
     painter.drawText(0.45*width(), -0.01*height(), tr("60°"));
     painter.drawText(0.26*width(), -0.38*height(), tr("30°"));
  
     painter.drawText(-0.47*width(), -0.01*height(), tr("300°"));
     painter.drawText(-0.28*width(), -0.38*height(), tr("330°"));
  
     painter.end();
  }
  </code></pre>
  
  <p>i tried different methods for resize handling (keeping the shape of the partialDisk object without stretching it) but every method failed. I also want to keep the coordinate handling of the unit-circle (so i can normalize my measurements and draw them into a polar-plot).</p>