annotate dwt/dnd/ImageTransfer.d @ 106:ed7dd292bfb3

Ported dwt.dnd.ImageTransfer
author Jacob Carlborg <doob@me.com>
date Wed, 31 Dec 2008 14:43:40 +0100
parents d8635bb48c7c
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
1 /*******************************************************************************
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
2 * Copyright (c) 2007, 2008 IBM Corporation and others.
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
3 * All rights reserved. This program and the accompanying materials
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
4 * are made available under the terms of the Eclipse Public License v1.0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
5 * which accompanies this distribution, and is available at
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
6 * http://www.eclipse.org/legal/epl-v10.html
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
7 *
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
8 * Contributors:
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
9 * IBM Corporation - initial API and implementation
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
10 * Outhink - support for typeFileURL
106
ed7dd292bfb3 Ported dwt.dnd.ImageTransfer
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
11 *
ed7dd292bfb3 Ported dwt.dnd.ImageTransfer
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
12 * Port to the D programming language:
ed7dd292bfb3 Ported dwt.dnd.ImageTransfer
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
13 * Jacob Carlborg <doob@me.com>
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
14 *******************************************************************************/
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
15 module dwt.dnd.ImageTransfer;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
16
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
17 import dwt.dwthelper.utils;
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
18
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
19 import dwt.DWT;
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
20 import dwt.graphics.Image;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
21 import dwt.graphics.ImageData;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
22 import dwt.internal.cocoa.NSData;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
23 import dwt.internal.cocoa.NSImage;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
24 import dwt.internal.cocoa.OS;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
25 import dwt.widgets.Display;
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
26
106
ed7dd292bfb3 Ported dwt.dnd.ImageTransfer
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
27 import dwt.dnd.DND;
ed7dd292bfb3 Ported dwt.dnd.ImageTransfer
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
28 import dwt.dnd.ByteArrayTransfer;
ed7dd292bfb3 Ported dwt.dnd.ImageTransfer
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
29 import dwt.dnd.TransferData;
ed7dd292bfb3 Ported dwt.dnd.ImageTransfer
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
30
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
31 /**
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
32 * The class <code>ImageTransfer</code> provides a platform specific mechanism
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
33 * for converting an Image represented as a java <code>ImageData</code> to a
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
34 * platform specific representation of the data and vice versa.
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
35 *
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
36 * <p>An example of a java <code>ImageData</code> is shown below:</p>
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
37 *
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
38 * <code><pre>
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
39 * Image image = new Image(display, "C:\temp\img1.gif");
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
40 * ImageData imgData = image.getImageData();
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
41 * </code></pre>
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
42 *
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
43 * @see Transfer
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
44 *
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
45 * @since 3.4
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
46 */
106
ed7dd292bfb3 Ported dwt.dnd.ImageTransfer
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
47 public class ImageTransfer : ByteArrayTransfer {
ed7dd292bfb3 Ported dwt.dnd.ImageTransfer
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
48
ed7dd292bfb3 Ported dwt.dnd.ImageTransfer
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
49 static ImageTransfer _instance;
ed7dd292bfb3 Ported dwt.dnd.ImageTransfer
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
50 static const String TIFF;
ed7dd292bfb3 Ported dwt.dnd.ImageTransfer
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
51 static const int TIFFID;
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
52
106
ed7dd292bfb3 Ported dwt.dnd.ImageTransfer
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
53 static this ()
ed7dd292bfb3 Ported dwt.dnd.ImageTransfer
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
54 {
ed7dd292bfb3 Ported dwt.dnd.ImageTransfer
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
55 _instance = new ImageTransfer();
ed7dd292bfb3 Ported dwt.dnd.ImageTransfer
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
56 TIFF = OS.NSTIFFPboardType.getString();
ed7dd292bfb3 Ported dwt.dnd.ImageTransfer
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
57 TIFFID = registerType(TIFF);
ed7dd292bfb3 Ported dwt.dnd.ImageTransfer
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
58 }
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
59
106
ed7dd292bfb3 Ported dwt.dnd.ImageTransfer
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
60 this() {
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
61 }
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
62
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
63 /**
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
64 * Returns the singleton instance of the ImageTransfer class.
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
65 *
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
66 * @return the singleton instance of the ImageTransfer class
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
67 */
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
68 public static ImageTransfer getInstance() {
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
69 return _instance;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
70 }
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
71
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
72 /**
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
73 * This implementation of <code>javaToNative</code> converts an ImageData object represented
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
74 * by java <code>ImageData</code> to a platform specific representation.
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
75 *
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
76 * @param object a java <code>ImageData</code> containing the ImageData to be converted
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
77 * @param transferData an empty <code>TransferData</code> object that will
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
78 * be filled in on return with the platform specific format of the data
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
79 *
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
80 * @see Transfer#nativeToJava
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
81 */
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
82 public void javaToNative(Object object, TransferData transferData) {
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
83 if (!checkImage(object) || !isSupportedType(transferData)) {
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
84 DND.error(DND.ERROR_INVALID_DATA);
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
85 }
106
ed7dd292bfb3 Ported dwt.dnd.ImageTransfer
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
86 ImageData imgData = cast(ImageData) object;
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
87 Image image = new Image(Display.getCurrent(), imgData);
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
88 NSImage handle = image.handle;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
89 transferData.data = handle.TIFFRepresentation();
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
90 image.dispose();
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
91 }
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
92
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
93 /**
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
94 * This implementation of <code>nativeToJava</code> converts a platform specific
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
95 * representation of an image to java <code>ImageData</code>.
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
96 *
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
97 * @param transferData the platform specific representation of the data to be converted
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
98 * @return a java <code>ImageData</code> of the image if the conversion was successful;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
99 * otherwise null
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
100 *
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
101 * @see Transfer#javaToNative
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
102 */
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
103 public Object nativeToJava(TransferData transferData) {
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
104 if (!isSupportedType(transferData) || transferData.data is null) return null;
106
ed7dd292bfb3 Ported dwt.dnd.ImageTransfer
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
105 NSData data = cast(NSData) transferData.data;
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
106 if (data.length() is 0) return null;
106
ed7dd292bfb3 Ported dwt.dnd.ImageTransfer
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
107 NSImage nsImage = cast(NSImage) (new NSImage()).alloc();
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
108 nsImage.initWithData(data);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
109 //TODO: Image representation wrong???
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
110 Image image = Image.cocoa_new(Display.getCurrent(), DWT.BITMAP, nsImage);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
111 ImageData imageData = image.getImageData();
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
112 image.dispose();
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
113 return imageData;
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
114 }
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
115
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
116 protected int[] getTypeIds() {
106
ed7dd292bfb3 Ported dwt.dnd.ImageTransfer
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
117 return [ TIFFID ];
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
118 }
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
119
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
120 protected String[] getTypeNames() {
106
ed7dd292bfb3 Ported dwt.dnd.ImageTransfer
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
121 return [ TIFF ];
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
122 }
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
123
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
124 bool checkImage(Object object) {
106
ed7dd292bfb3 Ported dwt.dnd.ImageTransfer
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
125 if (object is null || !(cast(ImageData) object)) return false;
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
126 return true;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
127 }
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
128
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
129 protected bool validate(Object object) {
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
130 return checkImage(object);
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
131 }
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
132 }