mirror of
https://git.suyu.dev/suyu/suyu
synced 2024-11-01 12:57:52 +00:00
Microprofile: DPI-aware drawing
This commit is contained in:
parent
f6eb62d062
commit
9b4187974b
1 changed files with 12 additions and 4 deletions
|
@ -151,6 +151,8 @@ private:
|
|||
/// This timer is used to redraw the widget's contents continuously. To save resources, it only
|
||||
/// runs while the widget is visible.
|
||||
QTimer update_timer;
|
||||
/// Scale the coordinate system appropriately when physical DPI != logical DPI.
|
||||
qreal x_scale, y_scale;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
@ -220,11 +222,17 @@ MicroProfileWidget::MicroProfileWidget(QWidget* parent) : QWidget(parent) {
|
|||
MicroProfileInitUI();
|
||||
|
||||
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) {
|
||||
QPainter painter(this);
|
||||
|
||||
painter.scale(x_scale, y_scale);
|
||||
|
||||
painter.setBackground(Qt::black);
|
||||
painter.eraseRect(rect());
|
||||
|
||||
|
@ -248,24 +256,24 @@ void MicroProfileWidget::hideEvent(QHideEvent* ev) {
|
|||
}
|
||||
|
||||
void MicroProfileWidget::mouseMoveEvent(QMouseEvent* ev) {
|
||||
MicroProfileMousePosition(ev->x(), ev->y(), 0);
|
||||
MicroProfileMousePosition(ev->x() / x_scale, ev->y() / y_scale, 0);
|
||||
ev->accept();
|
||||
}
|
||||
|
||||
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);
|
||||
ev->accept();
|
||||
}
|
||||
|
||||
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);
|
||||
ev->accept();
|
||||
}
|
||||
|
||||
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();
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue