* @brief Handles mouse wheel events to worldScale in or out of the 3D plot. */
| 1107 | * @brief Handles mouse wheel events to worldScale in or out of the 3D plot. |
| 1108 | */ |
| 1109 | void Widgets::Plot3D::wheelEvent(QWheelEvent* event) |
| 1110 | { |
| 1111 | if (event->angleDelta().y() != 0) { |
| 1112 | event->accept(); |
| 1113 | |
| 1114 | const bool isTouchpad = |
| 1115 | !event->pixelDelta().isNull() || event->source() == Qt::MouseEventSynthesizedBySystem; |
| 1116 | const double zoomFactor = isTouchpad ? 1.05 : 1.06; |
| 1117 | constexpr double kInv120 = 1.0 / 120.0; |
| 1118 | const double delta = -event->angleDelta().y() * kInv120; |
| 1119 | const double factor = qPow(zoomFactor, -delta); |
| 1120 | |
| 1121 | setWorldScale(worldScale() * factor); |
| 1122 | } |
| 1123 | } |
| 1124 | |
| 1125 | /** |
| 1126 | * @brief Handles mouse movement events to rotate or pan the 3D camera. |