Blob Blame Raw
#pragma once

#ifndef GLWIDGET_FOR_HIGHDPI_H
#define GLWIDGET_FOR_HIGHDPI_H

#include <QGLWidget>
#include <QApplication>
#include <QDesktopWidget>

// use obsolete QGLWidget instead of QOpenGLWidget for now...
// TODO: replace with the "modern" OpenGL source and transfer to QOpenGLWidget
class GLWidgetForHighDpi : public QGLWidget {
public:
  GLWidgetForHighDpi(QWidget *parent              = Q_NULLPTR,
                     const QGLWidget *shareWidget = Q_NULLPTR,
                     Qt::WindowFlags f            = Qt::WindowFlags())
      : QGLWidget(parent, shareWidget, f) {}

  // returns device-pixel ratio. It is 1 for normal monitors and 2 (or higher
  // ratio) for high DPI monitors. Setting "Display > Set custom text size(DPI)"
  // for Windows corresponds to this ratio.
  int getDevPixRatio() const {
    static int devPixRatio = QApplication::desktop()->devicePixelRatio();
    return devPixRatio;
  }
  //  modify sizes for high DPI monitors
  int width() const { return QGLWidget::width() * getDevPixRatio(); }
  int height() const { return QGLWidget::height() * getDevPixRatio(); }
  QRect rect() const { return QRect(0, 0, width(), height()); }
};

#endif