| 187 | } |
| 188 | |
| 189 | void DrawCamera::input_mouse_motion_callback(World& w, const InputManager::MouseMotionCallbackArgs& motion) { |
| 190 | if(!smoothMove.occurring && !isTouchTransforming) { |
| 191 | if(isAccurateZooming && startZoomVal != WorldScalar(0)) { |
| 192 | WorldScalar zoomFactor(std::pow(1.0 + w.main.conf.dragZoomSpeed, w.main.conf.flipZoomToolDirection ? motion.move.y() : -motion.move.y())); |
| 193 | if(zoomFactor < WorldScalar(0.000001)) |
| 194 | zoomFactor = WorldScalar(0.000001); |
| 195 | |
| 196 | c.scale(zoomFactor); |
| 197 | if(c.inverseScale < WorldScalar(0.0001)) |
| 198 | c.inverseScale = WorldScalar(0.0001); |
| 199 | else { |
| 200 | WorldVec mVec = startZoomCameraPos - startZoomMousePos; |
| 201 | WorldScalar mX = static_cast<WorldScalar>(WorldMultiplier(c.inverseScale) / WorldMultiplier(startZoomVal)); |
| 202 | c.pos = startZoomMousePos + mVec * mX; |
| 203 | } |
| 204 | |
| 205 | checks_after_input(w); |
| 206 | } |
| 207 | else if(w.drawProg.controls.middleClickHeld || (w.drawProg.controls.leftClickHeld && w.drawProg.drawTool->get_type() == DrawingProgramToolType::PAN)) { |
| 208 | c.pos -= c.dir_from_space(motion.move); |
| 209 | checks_after_input(w); |
| 210 | } |
| 211 | } |
| 212 | } |
| 213 | |
| 214 | void DrawCamera::input_mouse_wheel_callback(World& w, const InputManager::MouseWheelCallbackArgs& wheel) { |
| 215 | if(!smoothMove.occurring && !isTouchTransforming && wheel.tickAmount.y() && !w.main.g.gui.cursor_obstructed()) { |
no test coverage detected