fix selection for highdpi

This commit is contained in:
2023-02-07 10:11:00 +03:00
parent 4e02e154c6
commit 2b0a5f82b5
2 changed files with 16 additions and 25 deletions

View File

@@ -93,7 +93,8 @@ void MouseController::mouseReleaseEvent(QMouseEvent * e) {
void MouseController::mousePressEvent(QMouseEvent * e) {
downPos = e->pos();
QPoint cpos = e->pos() * view->devicePixelRatio();
downPos = cpos;
if (cur_action != RendererService::haNoAction && e->buttons() == Qt::LeftButton) {
return;
}
@@ -102,15 +103,15 @@ void MouseController::mousePressEvent(QMouseEvent * e) {
view->renderer_.mouse_rect = QRect();
return;
}
if (!QRect(QPoint(), view->size()).contains(e->pos())) return;
lastPos = e->pos();
downPos = e->pos();
if (!QRect(QPoint(), view->size()).contains(cpos)) return;
lastPos = cpos;
downPos = cpos;
emit view->glMousePressEvent(e);
}
void MouseController::mouseMoveEvent(QMouseEvent * e) {
QPoint cpos = e->pos();
QPoint cpos = e->pos() * view->devicePixelRatio();
if (cur_action != RendererService::haNoAction && (e->buttons() == Qt::LeftButton)) {
RendererService & rs(view->renderer_.rend_service);
ObjectBaseList objects = view->scene()->selectedObjects(true);
@@ -144,7 +145,7 @@ void MouseController::mouseMoveEvent(QMouseEvent * e) {
mouse_vector[1] *= -1.;
if (cur_action == RendererService::haMove) {
double len_scl = 1. / QVector3D(axe_screen.x(), axe_screen.y(), 1.E-6).length();
mouse_vector /= QVector3D(view->pixelWidth(), view->pixelHeight(), 1);
mouse_vector /= QVector3D(view->pixelWidth(), view->pixelHeight(), 1);
mouse_vector *= -center_screen.z() * len_scl;
axe_vector *= QVector3D::dotProduct(axe_screen, mouse_vector);
QMatrix4x4 pmat;
@@ -189,7 +190,7 @@ void MouseController::mouseMoveEvent(QMouseEvent * e) {
o->scale(QVector3D(1, 1, 1) + (axe_vector * sc));
QCursor::setPos(view->mapToGlobal(downPos));
} else
lastPos = e->pos();
lastPos = cpos;
emit view->objectsPositionChanged();
return;
}
@@ -206,19 +207,14 @@ void MouseController::mouseMoveEvent(QMouseEvent * e) {
}
QRect g_rect(QPoint(), view->size());
if (mouseRotate_) {
#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
float dx = e->x() - lastPos.x();
float dy = e->y() - lastPos.y();
#else
float dx = e->position().toPoint().x() - lastPos.x();
float dy = e->position().toPoint().y() - lastPos.y();
#endif
float dx = cpos.x() - lastPos.x();
float dy = cpos.y() - lastPos.y();
if (e->buttons().testFlag(QT_MID_BUTTON)) {
if (cameraOrbit_) {
view->camera()->orbitZ(dx / 4.f);
view->camera()->orbitXY(dy / 4.f);
} else {
view->camera()->rotateZ(-dx / 4.f);
view->camera()->rotateZ(-dx / 4.f);
view->camera()->rotateX(-dy / 4.f);
}
emit view->cameraPosChanged(view->camera()->pos());
@@ -229,8 +225,8 @@ void MouseController::mouseMoveEvent(QMouseEvent * e) {
emit view->cameraPosChanged(view->camera()->pos());
}
}
if (customMouseMove_) emit view->customMouseMoveEvent(e->pos(), lastPos, e->buttons());
lastPos = e->pos();
if (customMouseMove_) emit view->customMouseMoveEvent(cpos, lastPos, e->buttons());
lastPos = cpos;
if (e->buttons() == 0) {
cur_handle = QFlags<RendererService::HandleMesh>();
cur_action = RendererService::haNoAction;
@@ -267,13 +263,8 @@ void MouseController::mouseMoveEvent(QMouseEvent * e) {
return;
}
lastPos = g_rect.center();
#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
int dx = e->x() - lastPos.x();
int dy = e->y() - lastPos.y();
#else
int dx = e->position().toPoint().x() - lastPos.x();
int dy = e->position().toPoint().y() - lastPos.y();
#endif
int dx = cpos.x() - lastPos.x();
int dy = cpos.y() - lastPos.y();
emit view->glMouseMoveEvent(new QMouseEvent(QEvent::MouseMove, QPoint(dx, dy), e->button(), e->buttons(), e->modifiers()));
return;
}

View File

@@ -69,7 +69,7 @@ QGLViewWindow::QGLViewWindow(QWidget * parent): QMainWindow(parent), Ui::QGLView
view->view()->setHoverHaloEnabled(true);
view->view()->setDepthStart(0.1);
view->view()->setSelectionMode(Scene::smMultiSelection);
view->view()->renderer_.addFramebufferEffect(new Effect1());
// view->view()->renderer_.addFramebufferEffect(new Effect1());
groupShadows->setChecked(view->view()->isFeatureEnabled(QGLView::qglShadowsEnabled));