90 91 protected void startDrag(Transferable transferable, long[] formats, Map formatMap) { 92 DragGestureEvent trigger = getTrigger(); 93 InputEvent triggerEvent = trigger.getTriggerEvent(); 94 95 Point dragOrigin = new Point(trigger.getDragOrigin()); 96 int extModifiers = (triggerEvent.getModifiers() | triggerEvent.getModifiersEx()); 97 long timestamp = triggerEvent.getWhen(); 98 int clickCount = ((triggerEvent instanceof MouseEvent) ? (((MouseEvent) triggerEvent).getClickCount()) : 1); 99 100 Component component = trigger.getComponent(); 101 // For a lightweight component traverse up the hierarchy to the root 102 Point loc = component.getLocation(); 103 Component rootComponent = component; 104 while (!(rootComponent instanceof Window)) { 105 dragOrigin.translate(loc.x, loc.y); 106 rootComponent = rootComponent.getParent(); 107 loc = rootComponent.getLocation(); 108 } 109 110 //It sure will be LWComponentPeer instance as rootComponent is a Window 111 PlatformWindow platformWindow = ((LWComponentPeer)rootComponent.getPeer()).getPlatformWindow(); 112 long nativeViewPtr = CPlatformWindow.getNativeViewPtr(platformWindow); 113 114 // If there isn't any drag image make one of default appearance: 115 if (fDragImage == null) 116 this.setDefaultDragImage(component); 117 118 // Get drag image (if any) as BufferedImage and convert that to CImage: 119 Point dragImageOffset; 120 121 if (fDragImage != null) { 122 try { 123 fDragCImage = CImage.getCreator().createFromImageImmediately(fDragImage); 124 } catch(Exception e) { 125 // image creation may fail for any reason 126 throw new InvalidDnDOperationException("Drag image can not be created."); 127 } 128 if (fDragCImage == null) { 129 throw new InvalidDnDOperationException("Drag image is not ready."); 130 } 131 132 dragImageOffset = fDragImageOffset; 133 } else { 134 135 fDragCImage = null; 136 dragImageOffset = new Point(0, 0); 137 } 138 139 try { 140 // Create native dragging source: 141 final long nativeDragSource = createNativeDragSource(component, nativeViewPtr, transferable, triggerEvent, 142 (int) (dragOrigin.getX()), (int) (dragOrigin.getY()), extModifiers, 143 clickCount, timestamp, fDragCImage, dragImageOffset.x, dragImageOffset.y, 144 getDragSourceContext().getSourceActions(), formats, formatMap); 145 146 if (nativeDragSource == 0) 147 throw new InvalidDnDOperationException(""); 148 149 setNativeContext(nativeDragSource); 150 } 151 152 catch (Exception e) { 153 throw new InvalidDnDOperationException("failed to create native peer: " + e); 154 } 155 156 SunDropTargetContextPeer.setCurrentJVMLocalSourceTransferable(transferable); 157 158 CCursorManager.getInstance().setCursor(getCursor()); 159 | 90 91 protected void startDrag(Transferable transferable, long[] formats, Map formatMap) { 92 DragGestureEvent trigger = getTrigger(); 93 InputEvent triggerEvent = trigger.getTriggerEvent(); 94 95 Point dragOrigin = new Point(trigger.getDragOrigin()); 96 int extModifiers = (triggerEvent.getModifiers() | triggerEvent.getModifiersEx()); 97 long timestamp = triggerEvent.getWhen(); 98 int clickCount = ((triggerEvent instanceof MouseEvent) ? (((MouseEvent) triggerEvent).getClickCount()) : 1); 99 100 Component component = trigger.getComponent(); 101 // For a lightweight component traverse up the hierarchy to the root 102 Point loc = component.getLocation(); 103 Component rootComponent = component; 104 while (!(rootComponent instanceof Window)) { 105 dragOrigin.translate(loc.x, loc.y); 106 rootComponent = rootComponent.getParent(); 107 loc = rootComponent.getLocation(); 108 } 109 110 // If there isn't any drag image make one of default appearance: 111 if (fDragImage == null) 112 this.setDefaultDragImage(component); 113 114 // Get drag image (if any) as BufferedImage and convert that to CImage: 115 Point dragImageOffset; 116 117 if (fDragImage != null) { 118 try { 119 fDragCImage = CImage.getCreator().createFromImageImmediately(fDragImage); 120 } catch(Exception e) { 121 // image creation may fail for any reason 122 throw new InvalidDnDOperationException("Drag image can not be created."); 123 } 124 if (fDragCImage == null) { 125 throw new InvalidDnDOperationException("Drag image is not ready."); 126 } 127 128 dragImageOffset = fDragImageOffset; 129 } else { 130 131 fDragCImage = null; 132 dragImageOffset = new Point(0, 0); 133 } 134 135 try { 136 //It sure will be LWComponentPeer instance as rootComponent is a Window 137 PlatformWindow platformWindow = ((LWComponentPeer)rootComponent.getPeer()).getPlatformWindow(); 138 long nativeViewPtr = CPlatformWindow.getNativeViewPtr(platformWindow); 139 if (nativeViewPtr == 0L) throw new InvalidDnDOperationException(""); 140 141 // Create native dragging source: 142 final long nativeDragSource = createNativeDragSource(component, nativeViewPtr, transferable, triggerEvent, 143 (int) (dragOrigin.getX()), (int) (dragOrigin.getY()), extModifiers, 144 clickCount, timestamp, fDragCImage, dragImageOffset.x, dragImageOffset.y, 145 getDragSourceContext().getSourceActions(), formats, formatMap); 146 147 if (nativeDragSource == 0) 148 throw new InvalidDnDOperationException(""); 149 150 setNativeContext(nativeDragSource); 151 } 152 153 catch (Exception e) { 154 throw new InvalidDnDOperationException("failed to create native peer: " + e); 155 } 156 157 SunDropTargetContextPeer.setCurrentJVMLocalSourceTransferable(transferable); 158 159 CCursorManager.getInstance().setCursor(getCursor()); 160 |