code format
This commit is contained in:
@@ -1,49 +1,50 @@
|
||||
/*
|
||||
QGL MouseController
|
||||
Ivan Pelipenko peri4ko@yandex.ru
|
||||
QGL MouseController
|
||||
Ivan Pelipenko peri4ko@yandex.ru
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include "mouse_controller.h"
|
||||
|
||||
#include "glmesh.h"
|
||||
#include "qglview.h"
|
||||
#include <qad_types.h>
|
||||
|
||||
#include <QApplication>
|
||||
#include <QKeyEvent>
|
||||
#include <qad_types.h>
|
||||
|
||||
using namespace QGLEngineShaders;
|
||||
|
||||
|
||||
MouseController::MouseController(QGLView * view_): view(view_) {
|
||||
app_scale = 1;
|
||||
lastPos = QPoint(-1, -1);
|
||||
cur_action = RendererService::haNoAction;
|
||||
sel_button = Qt::LeftButton;
|
||||
sel_mod = Qt::ControlModifier;
|
||||
app_scale = 1;
|
||||
lastPos = QPoint(-1, -1);
|
||||
cur_action = RendererService::haNoAction;
|
||||
sel_button = Qt::LeftButton;
|
||||
sel_mod = Qt::ControlModifier;
|
||||
mouse_first = mouseSelect_ = mouseRotate_ = cameraOrbit_ = canSelect_ = true;
|
||||
grabMouse_ = mouse_sec = selecting_ = customMouseMove_ = false;
|
||||
}
|
||||
|
||||
|
||||
MouseController::~MouseController() {
|
||||
}
|
||||
MouseController::~MouseController() {}
|
||||
|
||||
|
||||
void MouseController::resize() {
|
||||
mouse_first = true;
|
||||
app_scale = appScale();
|
||||
app_scale = appScale();
|
||||
}
|
||||
|
||||
|
||||
@@ -54,8 +55,8 @@ void MouseController::mouseReleaseEvent(QMouseEvent * e) {
|
||||
}
|
||||
bool add_ts = e->modifiers().testFlag(sel_mod);
|
||||
if (selecting_) {
|
||||
selecting_ = false;
|
||||
canSelect_ = true;
|
||||
selecting_ = false;
|
||||
canSelect_ = true;
|
||||
view->renderer_.mouse_rect = QRect();
|
||||
view->scene()->selectObjects(hov_objects.toList(), add_ts);
|
||||
return;
|
||||
@@ -63,12 +64,11 @@ void MouseController::mouseReleaseEvent(QMouseEvent * e) {
|
||||
if (canSelect_ && mouseSelect_) {
|
||||
if ((lastPos - downPos).manhattanLength() < QApplication::startDragDistance()) {
|
||||
if (e->button() == Qt::LeftButton) {
|
||||
//qDebug() << hov_objects << hov_aims;
|
||||
// qDebug() << hov_objects << hov_aims;
|
||||
if (hov_objects.isEmpty() && hov_aims.isEmpty()) {
|
||||
view->scene()->clearSelection();
|
||||
} else {
|
||||
if (!hov_objects.isEmpty())
|
||||
view->scene()->selectObject(hov_objects[0], add_ts);
|
||||
if (!hov_objects.isEmpty()) view->scene()->selectObject(hov_objects[0], add_ts);
|
||||
if (!hov_aims.isEmpty()) {
|
||||
view->scene()->selectObject(hov_aims[0], add_ts);
|
||||
hov_aims[0]->setAimSelected(true);
|
||||
@@ -79,11 +79,11 @@ void MouseController::mouseReleaseEvent(QMouseEvent * e) {
|
||||
if (view->renderer_.edit_mode && !view->scene()->selectedObjects().isEmpty())
|
||||
view->popupMenu(
|
||||
#if QT_VERSION_MAJOR <= 5
|
||||
((QMouseEvent*)e)->globalPos()
|
||||
((QMouseEvent *)e)->globalPos()
|
||||
#else
|
||||
((QMouseEvent*)e)->globalPosition().toPoint()
|
||||
((QMouseEvent *)e)->globalPosition().toPoint()
|
||||
#endif
|
||||
);
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -98,7 +98,7 @@ void MouseController::mousePressEvent(QMouseEvent * e) {
|
||||
return;
|
||||
}
|
||||
if (selecting_) {
|
||||
selecting_ = false;
|
||||
selecting_ = false;
|
||||
view->renderer_.mouse_rect = QRect();
|
||||
return;
|
||||
}
|
||||
@@ -134,11 +134,12 @@ void MouseController::mouseMoveEvent(QMouseEvent * e) {
|
||||
default: break;
|
||||
}
|
||||
QVector<QVector3D> scales;
|
||||
foreach (int a, axis) {
|
||||
QVector3D axe_vector; axe_vector[a] = 1.;
|
||||
QMatrix4x4 axis_mat = view->camera()->fullViewMatrix() * rs.axis_mat;
|
||||
foreach(int a, axis) {
|
||||
QVector3D axe_vector;
|
||||
axe_vector[a] = 1.;
|
||||
QMatrix4x4 axis_mat = view->camera()->fullViewMatrix() * rs.axis_mat;
|
||||
QVector3D center_screen = axis_mat.map(rs.selection_center);
|
||||
QVector3D axe_screen = (axis_mat.map(rs.selection_center + axe_vector) - center_screen).normalized();
|
||||
QVector3D axe_screen = (axis_mat.map(rs.selection_center + axe_vector) - center_screen).normalized();
|
||||
QVector3D mouse_vector(cpos - lastPos);
|
||||
mouse_vector[1] *= -1.;
|
||||
if (cur_action == RendererService::haMove) {
|
||||
@@ -147,13 +148,12 @@ void MouseController::mouseMoveEvent(QMouseEvent * e) {
|
||||
mouse_vector *= -center_screen.z() * len_scl;
|
||||
axe_vector *= QVector3D::dotProduct(axe_screen, mouse_vector);
|
||||
QMatrix4x4 pmat;
|
||||
foreach (ObjectBase * o, objects) {
|
||||
foreach(ObjectBase * o, objects) {
|
||||
pmat.setToIdentity();
|
||||
if (o->parent())
|
||||
pmat = o->parent()->worldTransform().inverted();
|
||||
if (o->parent()) pmat = o->parent()->worldTransform().inverted();
|
||||
QVector3D dv = pmat.mapVector(axe_vector);
|
||||
if (o->isAimSelected()) {
|
||||
AimedObject * ao = (AimedObject*)o;
|
||||
AimedObject * ao = (AimedObject *)o;
|
||||
ao->setAim(ao->aim() + dv);
|
||||
} else
|
||||
o->move(dv);
|
||||
@@ -164,7 +164,7 @@ void MouseController::mouseMoveEvent(QMouseEvent * e) {
|
||||
axe_screen.normalize();
|
||||
QVector3D norm = QVector3D(axe_screen.y(), -axe_screen.x(), 0.);
|
||||
axe_vector *= QVector3D::dotProduct(mouse_vector, norm) / 2. / app_scale;
|
||||
foreach (ObjectBase * o, objects)
|
||||
foreach(ObjectBase * o, objects)
|
||||
o->setRotation(o->rotation() + axe_vector);
|
||||
}
|
||||
if (cur_action == RendererService::haScale) {
|
||||
@@ -176,17 +176,17 @@ void MouseController::mouseMoveEvent(QMouseEvent * e) {
|
||||
}
|
||||
if (cur_action == RendererService::haScale) {
|
||||
double sc = 0., max = 0.;
|
||||
foreach (const QVector3D & s, scales) {
|
||||
double v = QVector3D::dotProduct(s, QVector3D(1,1,1));
|
||||
foreach(const QVector3D & s, scales) {
|
||||
double v = QVector3D::dotProduct(s, QVector3D(1, 1, 1));
|
||||
sc += v;
|
||||
max = qMax(max, qAbs(v));
|
||||
}
|
||||
sc = max * (sc > 0. ? 1. : -1);
|
||||
QVector3D axe_vector;
|
||||
foreach (int a, axis)
|
||||
foreach(int a, axis)
|
||||
axe_vector[a] = 1.;
|
||||
foreach (ObjectBase * o, objects)
|
||||
o->scale(QVector3D(1,1,1) + (axe_vector * sc));
|
||||
foreach(ObjectBase * o, objects)
|
||||
o->scale(QVector3D(1, 1, 1) + (axe_vector * sc));
|
||||
QCursor::setPos(view->mapToGlobal(downPos));
|
||||
} else
|
||||
lastPos = e->pos();
|
||||
@@ -215,7 +215,7 @@ void MouseController::mouseMoveEvent(QMouseEvent * e) {
|
||||
#endif
|
||||
if (e->buttons().testFlag(QT_MID_BUTTON)) {
|
||||
if (cameraOrbit_) {
|
||||
view->camera()->orbitZ (dx / 4.f);
|
||||
view->camera()->orbitZ(dx / 4.f);
|
||||
view->camera()->orbitXY(dy / 4.f);
|
||||
} else {
|
||||
view->camera()->rotateZ(-dx / 4.f);
|
||||
@@ -225,34 +225,33 @@ void MouseController::mouseMoveEvent(QMouseEvent * e) {
|
||||
} else if (e->buttons().testFlag(Qt::RightButton)) {
|
||||
float ad = view->camera()->distance();
|
||||
view->camera()->moveLeft(dx / 1000.f * ad);
|
||||
view->camera()->moveUp (dy / 1000.f * ad);
|
||||
view->camera()->moveUp(dy / 1000.f * ad);
|
||||
emit view->cameraPosChanged(view->camera()->pos());
|
||||
}
|
||||
}
|
||||
if (customMouseMove_) emit view->customMouseMoveEvent(e->pos(), lastPos, e->buttons());
|
||||
lastPos = e->pos();
|
||||
if (e->buttons() == 0) {
|
||||
cur_handle = QFlags<RendererService::HandleMesh>();
|
||||
cur_action = RendererService::haNoAction;
|
||||
cur_handle = QFlags<RendererService::HandleMesh>();
|
||||
cur_action = RendererService::haNoAction;
|
||||
Qt::CursorShape cs = Qt::CrossCursor;
|
||||
if (view->renderer_.edit_mode) {
|
||||
uint hid = view->renderer_.rend_selection.id_hover;
|
||||
uint hid = view->renderer_.rend_selection.id_hover;
|
||||
cur_handle = (RendererService::HandleMesh)hid;
|
||||
if (hid >= RendererService::hmMoveX && hid <= RendererService::hmMaxMove ) {
|
||||
if (hid >= RendererService::hmMoveX && hid <= RendererService::hmMaxMove) {
|
||||
cur_action = RendererService::haMove;
|
||||
cs = Qt::SizeAllCursor;
|
||||
cs = Qt::SizeAllCursor;
|
||||
}
|
||||
if (hid >= RendererService::hmRotateX && hid <= RendererService::hmMaxRotate) {
|
||||
cur_action = RendererService::haRotate;
|
||||
cs = Qt::PointingHandCursor;
|
||||
cs = Qt::PointingHandCursor;
|
||||
}
|
||||
if (hid >= RendererService::hmScaleX && hid <= RendererService::hmMaxScale ) {
|
||||
if (hid >= RendererService::hmScaleX && hid <= RendererService::hmMaxScale) {
|
||||
cur_action = RendererService::haScale;
|
||||
cs = Qt::SplitHCursor;
|
||||
cs = Qt::SplitHCursor;
|
||||
}
|
||||
}
|
||||
if (cur_action == RendererService::haNoAction)
|
||||
cur_handle = QFlags<RendererService::HandleMesh>();
|
||||
if (cur_action == RendererService::haNoAction) cur_handle = QFlags<RendererService::HandleMesh>();
|
||||
view->setCursor(cs);
|
||||
view->renderer_.rend_service.current_handle = cur_handle;
|
||||
}
|
||||
@@ -264,7 +263,7 @@ void MouseController::mouseMoveEvent(QMouseEvent * e) {
|
||||
}
|
||||
if (mouse_first) {
|
||||
mouse_first = false;
|
||||
mouse_sec = true;
|
||||
mouse_sec = true;
|
||||
return;
|
||||
}
|
||||
lastPos = g_rect.center();
|
||||
@@ -272,8 +271,8 @@ void MouseController::mouseMoveEvent(QMouseEvent * e) {
|
||||
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();
|
||||
int dx = e->position().toPoint().x() - lastPos.x();
|
||||
int dy = e->position().toPoint().y() - lastPos.y();
|
||||
#endif
|
||||
emit view->glMouseMoveEvent(new QMouseEvent(QEvent::MouseMove, QPoint(dx, dy), e->button(), e->buttons(), e->modifiers()));
|
||||
return;
|
||||
@@ -286,9 +285,9 @@ void MouseController::wheelEvent(QWheelEvent * e) {
|
||||
if (mouseRotate_) {
|
||||
double ang =
|
||||
#if QT_VERSION < QT_VERSION_CHECK(5, 14, 0)
|
||||
e->delta();
|
||||
e->delta();
|
||||
#else
|
||||
e->angleDelta().y();
|
||||
e->angleDelta().y();
|
||||
#endif
|
||||
if (ang > 0) view->camera()->flyCloser(0.1f);
|
||||
if (ang < 0) view->camera()->flyFarer(0.1f);
|
||||
@@ -298,13 +297,12 @@ void MouseController::wheelEvent(QWheelEvent * e) {
|
||||
}
|
||||
|
||||
|
||||
void MouseController::leaveEvent(QEvent * ) {
|
||||
void MouseController::leaveEvent(QEvent *) {
|
||||
lastPos = QPoint(-1, -1);
|
||||
//qDebug() << lastPos;
|
||||
// qDebug() << lastPos;
|
||||
}
|
||||
|
||||
|
||||
void MouseController::mouseDoubleClickEvent(QMouseEvent * e) {
|
||||
if (e->buttons().testFlag(QT_MID_BUTTON))
|
||||
emit view->doubleClick();
|
||||
if (e->buttons().testFlag(QT_MID_BUTTON)) emit view->doubleClick();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user