void detachDragFromEditorAnnotation(MouseTrackerAnnotation annotation, int deviceId) { if (!this.inEditorWindow) { return; } if (annotation.onDragFromEditorExit != null) { annotation.onDragFromEditorExit( PointerDragFromEditorExitEvent.fromDragFromEditorEvent(this._lastMouseEvent[deviceId])); } }
public void detachDragFromEditorAnnotation(EditorMouseTrackerAnnotation annotation) { var trackedAnnotation = _findAnnotation(annotation); foreach (var deviceId in trackedAnnotation.activeDevices) { annotation.onDragFromEditorExit(PointerDragFromEditorExitEvent.fromDragFromEditorEvent( _lastMouseEvent[deviceId] )); } _trackedAnnotations.Remove(annotation); }
public void collectDragFromEditorMousePositions() { void exitAnnotation(_TrackedAnnotation trackedAnnotation, int deviceId) { if (trackedAnnotation.activeDevices.Contains(deviceId)) { this._enableDragFromEditorRelease = false; if (trackedAnnotation.annotation?.onDragFromEditorExit != null) { trackedAnnotation.annotation.onDragFromEditorExit( PointerDragFromEditorExitEvent.fromDragFromEditorEvent( this._lastMouseEvent[deviceId])); } trackedAnnotation.activeDevices.Remove(deviceId); } } void exitAllDevices(_TrackedAnnotation trackedAnnotation) { if (trackedAnnotation.activeDevices.isNotEmpty()) { HashSet <int> deviceIds = new HashSet <int>(trackedAnnotation.activeDevices); foreach (int deviceId in deviceIds) { exitAnnotation(trackedAnnotation, deviceId); } } } if (!this.mouseIsConnected) { foreach (var annotation in this._trackedAnnotations.Values) { exitAllDevices(annotation); } return; } foreach (int deviceId in this._lastMouseEvent.Keys) { PointerEvent lastEvent = this._lastMouseEvent[deviceId]; MouseTrackerAnnotation hit = this.annotationFinder(lastEvent.position); if (hit == null) { foreach (_TrackedAnnotation trackedAnnotation in this._trackedAnnotations.Values) { exitAnnotation(trackedAnnotation, deviceId); } return; } _TrackedAnnotation hitAnnotation = this._findAnnotation(hit); // While acrossing two areas, set the flag to true to prevent setting the Pointer Copy VisualMode to None bool enterFlag = false; // enter if (!hitAnnotation.activeDevices.Contains(deviceId)) { hitAnnotation.activeDevices.Add(deviceId); enterFlag = true; // Both onRelease or onEnter event will enable Copy VisualMode if (hitAnnotation.annotation?.onDragFromEditorRelease != null || hitAnnotation.annotation?.onDragFromEditorEnter != null) { if (!this._enableDragFromEditorRelease) { this._enableDragFromEditorRelease = true; this._enableDragFromEditorReleaseVisualModeLoop(); } if (hitAnnotation.annotation?.onDragFromEditorEnter != null) { hitAnnotation.annotation.onDragFromEditorEnter( PointerDragFromEditorEnterEvent .fromDragFromEditorEvent(lastEvent)); } } } // hover if (hitAnnotation.annotation?.onDragFromEditorHover != null) { hitAnnotation.annotation.onDragFromEditorHover( PointerDragFromEditorHoverEvent.fromDragFromEditorEvent(lastEvent)); } // leave foreach (_TrackedAnnotation trackedAnnotation in this._trackedAnnotations.Values) { if (hitAnnotation == trackedAnnotation) { continue; } if (trackedAnnotation.activeDevices.Contains(deviceId)) { if (!enterFlag) { this._enableDragFromEditorRelease = false; } if (trackedAnnotation.annotation?.onDragFromEditorExit != null) { trackedAnnotation.annotation.onDragFromEditorExit( PointerDragFromEditorExitEvent .fromDragFromEditorEvent(lastEvent)); } trackedAnnotation.activeDevices.Remove(deviceId); } } } }