(
bridge: &NativeBridge,
udid: &str,
request: RotateGestureRequest,
)
| 115 | } |
| 116 | |
| 117 | fn rotate_gesture_frames( |
| 118 | bridge: &NativeBridge, |
| 119 | udid: &str, |
| 120 | request: RotateGestureRequest, |
| 121 | ) -> Result<Vec<MultiTouchFrame>, crate::error::AppError> { |
| 122 | if request.radius < 0.0 { |
| 123 | return Err(crate::error::AppError::bad_request( |
| 124 | "Rotate gesture radius must be non-negative.", |
| 125 | )); |
| 126 | } |
| 127 | let (width, height) = gesture_surface_size(bridge, udid, request.normalized); |
| 128 | let center_x = request.center_x.unwrap_or(width / 2.0); |
| 129 | let center_y = request.center_y.unwrap_or(height / 2.0); |
| 130 | let count = request.steps.max(2); |
| 131 | let mut frames = Vec::with_capacity(count as usize); |
| 132 | for step in 0..count { |
| 133 | let t = if count == 1 { |
| 134 | 1.0 |
| 135 | } else { |
| 136 | f64::from(step) / f64::from(count - 1) |
| 137 | }; |
| 138 | let angle = (request.degrees * t).to_radians(); |
| 139 | let unit_x = angle.cos(); |
| 140 | let unit_y = angle.sin(); |
| 141 | let p1x = center_x - unit_x * request.radius; |
| 142 | let p1y = center_y - unit_y * request.radius; |
| 143 | let p2x = center_x + unit_x * request.radius; |
| 144 | let p2y = center_y + unit_y * request.radius; |
| 145 | let (x1, y1) = resolve_touch_point(bridge, udid, p1x, p1y, request.normalized)?; |
| 146 | let (x2, y2) = resolve_touch_point(bridge, udid, p2x, p2y, request.normalized)?; |
| 147 | frames.push(MultiTouchFrame { x1, y1, x2, y2 }); |
| 148 | } |
| 149 | Ok(frames) |
| 150 | } |
| 151 | |
| 152 | fn gesture_surface_size(bridge: &NativeBridge, udid: &str, normalized: bool) -> (f64, f64) { |
| 153 | if normalized { |
no test coverage detected