1 /*
2 * Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation. Oracle designates this
8 * particular file as subject to the "Classpath" exception as provided
9 * by Oracle in the LICENSE file that accompanied this code.
10 *
11 * This code is distributed in the hope that it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14 * version 2 for more details (a copy is included in the LICENSE file that
15 * accompanied this code).
16 *
17 * You should have received a copy of the GNU General Public License version
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22 * or visit www.oracle.com if you need additional information or have any
264 int h = image.getHeight();
265 ByteBuffer pixels = image.getPixelBuffer();
266
267 ByteBuffer dragImage = ByteBuffer.allocate(8 + w*h*4);
268 dragImage.putInt(w);
269 dragImage.putInt(h);
270 dragImage.put(pixels);
271 content.put(DF_DRAG_IMAGE, dragImage);
272
273 //The image is prepared synchronously, that is sad.
274 //Image need to be created by target request only.
275 //QuantumClipboard.putContent have to be rewritten in Glass manner
276 //with postponed data requests (DelayedCallback data object).
277 Object platformImage = image.getWidth() > 0 && image.getHeight() > 0 ?
278 image.getPlatformImage() : null;
279 if (platformImage != null) {
280 try {
281 File temp = File.createTempFile("jfx", ".png");
282 temp.deleteOnExit();
283 ImageIO.write(
284 toBufferedImage(Image.impl_fromPlatformImage(
285 Toolkit.getToolkit().loadPlatformImage(
286 platformImage
287 )
288 )),
289 "png",
290 temp);
291 content.put(DataFormat.FILES, Arrays.asList(temp));
292 } catch (IOException | SecurityException e) {
293 //That is ok. It was just an attempt.
294 //e.printStackTrace();
295 }
296 }
297 }
298 }
299
300 @Override public void confirmStartDrag() {
301 WebView view = accessor.getView();
302 if (view != null && content != null) {
303 //TODO: implement native support for Drag Source actions.
304 Dragboard db = view.startDragAndDrop(TransferMode.ANY);
|
1 /*
2 * Copyright (c) 2011, 2016, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation. Oracle designates this
8 * particular file as subject to the "Classpath" exception as provided
9 * by Oracle in the LICENSE file that accompanied this code.
10 *
11 * This code is distributed in the hope that it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14 * version 2 for more details (a copy is included in the LICENSE file that
15 * accompanied this code).
16 *
17 * You should have received a copy of the GNU General Public License version
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22 * or visit www.oracle.com if you need additional information or have any
264 int h = image.getHeight();
265 ByteBuffer pixels = image.getPixelBuffer();
266
267 ByteBuffer dragImage = ByteBuffer.allocate(8 + w*h*4);
268 dragImage.putInt(w);
269 dragImage.putInt(h);
270 dragImage.put(pixels);
271 content.put(DF_DRAG_IMAGE, dragImage);
272
273 //The image is prepared synchronously, that is sad.
274 //Image need to be created by target request only.
275 //QuantumClipboard.putContent have to be rewritten in Glass manner
276 //with postponed data requests (DelayedCallback data object).
277 Object platformImage = image.getWidth() > 0 && image.getHeight() > 0 ?
278 image.getPlatformImage() : null;
279 if (platformImage != null) {
280 try {
281 File temp = File.createTempFile("jfx", ".png");
282 temp.deleteOnExit();
283 ImageIO.write(
284 toBufferedImage(Toolkit.getImageAccessor().fromPlatformImage(
285 Toolkit.getToolkit().loadPlatformImage(
286 platformImage
287 )
288 )),
289 "png",
290 temp);
291 content.put(DataFormat.FILES, Arrays.asList(temp));
292 } catch (IOException | SecurityException e) {
293 //That is ok. It was just an attempt.
294 //e.printStackTrace();
295 }
296 }
297 }
298 }
299
300 @Override public void confirmStartDrag() {
301 WebView view = accessor.getView();
302 if (view != null && content != null) {
303 //TODO: implement native support for Drag Source actions.
304 Dragboard db = view.startDragAndDrop(TransferMode.ANY);
|