Skip to content
Snippets Groups Projects
Commit d895bc15 authored by bunnei's avatar bunnei
Browse files

Merge pull request #1785 from MerryMage/mp-dpi

Microprofile: DPI-aware drawing
parents d0148739 9b418797
No related branches found
No related tags found
No related merge requests found
...@@ -151,6 +151,8 @@ private: ...@@ -151,6 +151,8 @@ private:
/// This timer is used to redraw the widget's contents continuously. To save resources, it only /// This timer is used to redraw the widget's contents continuously. To save resources, it only
/// runs while the widget is visible. /// runs while the widget is visible.
QTimer update_timer; QTimer update_timer;
/// Scale the coordinate system appropriately when physical DPI != logical DPI.
qreal x_scale, y_scale;
}; };
#endif #endif
...@@ -220,11 +222,17 @@ MicroProfileWidget::MicroProfileWidget(QWidget* parent) : QWidget(parent) { ...@@ -220,11 +222,17 @@ MicroProfileWidget::MicroProfileWidget(QWidget* parent) : QWidget(parent) {
MicroProfileInitUI(); MicroProfileInitUI();
connect(&update_timer, SIGNAL(timeout()), SLOT(update())); connect(&update_timer, SIGNAL(timeout()), SLOT(update()));
QPainter painter(this);
x_scale = qreal(painter.device()->physicalDpiX()) / qreal(painter.device()->logicalDpiX());
y_scale = qreal(painter.device()->physicalDpiY()) / qreal(painter.device()->logicalDpiY());
} }
void MicroProfileWidget::paintEvent(QPaintEvent* ev) { void MicroProfileWidget::paintEvent(QPaintEvent* ev) {
QPainter painter(this); QPainter painter(this);
painter.scale(x_scale, y_scale);
painter.setBackground(Qt::black); painter.setBackground(Qt::black);
painter.eraseRect(rect()); painter.eraseRect(rect());
...@@ -248,24 +256,24 @@ void MicroProfileWidget::hideEvent(QHideEvent* ev) { ...@@ -248,24 +256,24 @@ void MicroProfileWidget::hideEvent(QHideEvent* ev) {
} }
void MicroProfileWidget::mouseMoveEvent(QMouseEvent* ev) { void MicroProfileWidget::mouseMoveEvent(QMouseEvent* ev) {
MicroProfileMousePosition(ev->x(), ev->y(), 0); MicroProfileMousePosition(ev->x() / x_scale, ev->y() / y_scale, 0);
ev->accept(); ev->accept();
} }
void MicroProfileWidget::mousePressEvent(QMouseEvent* ev) { void MicroProfileWidget::mousePressEvent(QMouseEvent* ev) {
MicroProfileMousePosition(ev->x(), ev->y(), 0); MicroProfileMousePosition(ev->x() / x_scale, ev->y() / y_scale, 0);
MicroProfileMouseButton(ev->buttons() & Qt::LeftButton, ev->buttons() & Qt::RightButton); MicroProfileMouseButton(ev->buttons() & Qt::LeftButton, ev->buttons() & Qt::RightButton);
ev->accept(); ev->accept();
} }
void MicroProfileWidget::mouseReleaseEvent(QMouseEvent* ev) { void MicroProfileWidget::mouseReleaseEvent(QMouseEvent* ev) {
MicroProfileMousePosition(ev->x(), ev->y(), 0); MicroProfileMousePosition(ev->x() / x_scale, ev->y() / y_scale, 0);
MicroProfileMouseButton(ev->buttons() & Qt::LeftButton, ev->buttons() & Qt::RightButton); MicroProfileMouseButton(ev->buttons() & Qt::LeftButton, ev->buttons() & Qt::RightButton);
ev->accept(); ev->accept();
} }
void MicroProfileWidget::wheelEvent(QWheelEvent* ev) { void MicroProfileWidget::wheelEvent(QWheelEvent* ev) {
MicroProfileMousePosition(ev->x(), ev->y(), ev->delta() / 120); MicroProfileMousePosition(ev->x() / x_scale, ev->y() / y_scale, ev->delta() / 120);
ev->accept(); ev->accept();
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment