| 288 | } |
| 289 | |
| 290 | bool Canvas::MouseMoved(float x, float y) |
| 291 | { |
| 292 | CheckHover(x, y); |
| 293 | |
| 294 | bool quantize = GetKeyModifiers() & kModifier_Command; |
| 295 | |
| 296 | if (mDragEnd != kHighlightEnd_None) |
| 297 | { |
| 298 | ofVec2f scaled = RescaleForZoom(x, y); |
| 299 | if (mDragEnd == kHighlightEnd_Start) |
| 300 | { |
| 301 | float oldStart = mClickedElement->GetStart(); |
| 302 | float newStart = scaled.x / GetWidth() / mLength; |
| 303 | float startDelta = newStart - oldStart; |
| 304 | for (auto* element : mElements) |
| 305 | { |
| 306 | if (element->GetHighlighted()) |
| 307 | { |
| 308 | float start = element->GetStart() + startDelta; |
| 309 | if (quantize) |
| 310 | start = QuantizeToGrid(start); |
| 311 | element->SetStart(start, false); |
| 312 | } |
| 313 | } |
| 314 | } |
| 315 | if (mDragEnd == kHighlightEnd_End) |
| 316 | { |
| 317 | float oldEnd = mClickedElement->GetEnd(); |
| 318 | float newEnd = scaled.x / GetWidth() / mLength; |
| 319 | float endDelta = newEnd - oldEnd; |
| 320 | for (auto* element : mElements) |
| 321 | { |
| 322 | if (element->GetHighlighted()) |
| 323 | { |
| 324 | float end = element->GetEnd() + endDelta; |
| 325 | if (quantize) |
| 326 | end = QuantizeToGrid(end); |
| 327 | element->SetEnd(end); |
| 328 | } |
| 329 | } |
| 330 | } |
| 331 | return true; |
| 332 | } |
| 333 | |
| 334 | if (x >= 0 && x < mWidth && y >= 0 && y < mHeight) |
| 335 | { |
| 336 | if (mClick) |
| 337 | { |
| 338 | if (mClickedElement != nullptr) |
| 339 | { |
| 340 | ofVec2f dragOffset = (ofVec2f(TheSynth->GetRawMouseX(), TheSynth->GetRawMouseY()) - mClickedElementStartMousePos) / gDrawScale; |
| 341 | |
| 342 | if (GetKeyModifiers() & kModifier_Shift && !mHasDuplicatedThisDrag && dragOffset.distanceSquared() > 9) |
| 343 | { |
| 344 | mHasDuplicatedThisDrag = true; |
| 345 | std::vector<CanvasElement*> newElements; |
| 346 | for (auto element : mElements) |
| 347 | { |
nothing calls this directly
no test coverage detected