src/macosx/classes/sun/lwawt/macosx/CDragSourceContextPeer.java

Print this page




  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