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
23 * questions.
24 */
25
26 package javafx.embed.swing;
27
28 import java.awt.Cursor;
29 import java.awt.Dimension;
30 import java.awt.Point;
31 import java.awt.Toolkit;
32 import java.awt.image.BufferedImage;
33
34 import com.sun.javafx.cursor.CursorFrame;
35 import com.sun.javafx.cursor.ImageCursorFrame;
36
37 /**
38 * An utility class to translate cursor types between embedded
39 * application and Swing.
40 *
41 */
42 class SwingCursors {
43
44 private static Cursor createCustomCursor(ImageCursorFrame cursorFrame) {
45 Toolkit awtToolkit = Toolkit.getDefaultToolkit();
46
47 double imageWidth = cursorFrame.getWidth();
48 double imageHeight = cursorFrame.getHeight();
49 Dimension nativeSize = awtToolkit.getBestCursorSize((int)imageWidth, (int)imageHeight);
50
51 double scaledHotspotX = cursorFrame.getHotspotX() * nativeSize.getWidth() / imageWidth;
52 double scaledHotspotY = cursorFrame.getHotspotY() * nativeSize.getHeight() / imageHeight;
53 Point hotspot = new Point((int)scaledHotspotX, (int)scaledHotspotY);
54
55 BufferedImage awtImage = SwingFXUtils.fromFXImage(
56 com.sun.javafx.tk.Toolkit.getImageAccessor().fromPlatformImage(cursorFrame.getPlatformImage()), null);
57 return awtToolkit.createCustomCursor(awtImage, hotspot, null);
58 }
59
60 static Cursor embedCursorToCursor(CursorFrame cursorFrame) {
61 switch (cursorFrame.getCursorType()) {
62 case DEFAULT:
63 return Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR);
64 case CROSSHAIR:
65 return Cursor.getPredefinedCursor(Cursor.CROSSHAIR_CURSOR);
66 case TEXT:
67 return Cursor.getPredefinedCursor(Cursor.TEXT_CURSOR);
68 case WAIT:
69 return Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR);
70 case SW_RESIZE:
71 return Cursor.getPredefinedCursor(Cursor.SW_RESIZE_CURSOR);
72 case SE_RESIZE:
73 return Cursor.getPredefinedCursor(Cursor.SE_RESIZE_CURSOR);
74 case NW_RESIZE:
75 return Cursor.getPredefinedCursor(Cursor.NW_RESIZE_CURSOR);
76 case NE_RESIZE:
77 return Cursor.getPredefinedCursor(Cursor.NE_RESIZE_CURSOR);
78 case N_RESIZE:
79 case V_RESIZE:
80 return Cursor.getPredefinedCursor(Cursor.N_RESIZE_CURSOR);
86 case E_RESIZE:
87 return Cursor.getPredefinedCursor(Cursor.E_RESIZE_CURSOR);
88 case OPEN_HAND:
89 case CLOSED_HAND:
90 case HAND:
91 return Cursor.getPredefinedCursor(Cursor.HAND_CURSOR);
92 case MOVE:
93 return Cursor.getPredefinedCursor(Cursor.MOVE_CURSOR);
94 // Not implemented, use default cursor instead
95 case DISAPPEAR:
96 return Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR);
97 case NONE:
98 return null;
99 case IMAGE:
100 return createCustomCursor((ImageCursorFrame) cursorFrame);
101 }
102
103 return Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR);
104 }
105
106 static javafx.scene.Cursor embedCursorToCursor(Cursor cursor) {
107 if (cursor == null) {
108 return javafx.scene.Cursor.DEFAULT;
109 }
110
111 switch (cursor.getType()) {
112 case Cursor.DEFAULT_CURSOR:
113 return javafx.scene.Cursor.DEFAULT;
114 case Cursor.CROSSHAIR_CURSOR:
115 return javafx.scene.Cursor.CROSSHAIR;
116 case Cursor.E_RESIZE_CURSOR:
117 return javafx.scene.Cursor.E_RESIZE;
118 case Cursor.HAND_CURSOR:
119 return javafx.scene.Cursor.HAND;
120 case Cursor.MOVE_CURSOR:
121 return javafx.scene.Cursor.MOVE;
122 case Cursor.N_RESIZE_CURSOR:
123 return javafx.scene.Cursor.N_RESIZE;
124 case Cursor.NE_RESIZE_CURSOR:
125 return javafx.scene.Cursor.NE_RESIZE;
126 case Cursor.NW_RESIZE_CURSOR:
|
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
23 * questions.
24 */
25
26 package com.sun.javafx.embed.swing;
27
28 import java.awt.Cursor;
29 import java.awt.Dimension;
30 import java.awt.Point;
31 import java.awt.Toolkit;
32 import java.awt.image.BufferedImage;
33
34 import com.sun.javafx.cursor.CursorFrame;
35 import com.sun.javafx.cursor.ImageCursorFrame;
36
37 import javafx.embed.swing.SwingFXUtils;
38
39 /**
40 * An utility class to translate cursor types between embedded
41 * application and Swing.
42 *
43 */
44 public class SwingCursors {
45
46 private static Cursor createCustomCursor(ImageCursorFrame cursorFrame) {
47 Toolkit awtToolkit = Toolkit.getDefaultToolkit();
48
49 double imageWidth = cursorFrame.getWidth();
50 double imageHeight = cursorFrame.getHeight();
51 Dimension nativeSize = awtToolkit.getBestCursorSize((int)imageWidth, (int)imageHeight);
52
53 double scaledHotspotX = cursorFrame.getHotspotX() * nativeSize.getWidth() / imageWidth;
54 double scaledHotspotY = cursorFrame.getHotspotY() * nativeSize.getHeight() / imageHeight;
55 Point hotspot = new Point((int)scaledHotspotX, (int)scaledHotspotY);
56
57 BufferedImage awtImage = SwingFXUtils.fromFXImage(
58 com.sun.javafx.tk.Toolkit.getImageAccessor().fromPlatformImage(cursorFrame.getPlatformImage()), null);
59 return awtToolkit.createCustomCursor(awtImage, hotspot, null);
60 }
61
62 public static Cursor embedCursorToCursor(CursorFrame cursorFrame) {
63 switch (cursorFrame.getCursorType()) {
64 case DEFAULT:
65 return Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR);
66 case CROSSHAIR:
67 return Cursor.getPredefinedCursor(Cursor.CROSSHAIR_CURSOR);
68 case TEXT:
69 return Cursor.getPredefinedCursor(Cursor.TEXT_CURSOR);
70 case WAIT:
71 return Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR);
72 case SW_RESIZE:
73 return Cursor.getPredefinedCursor(Cursor.SW_RESIZE_CURSOR);
74 case SE_RESIZE:
75 return Cursor.getPredefinedCursor(Cursor.SE_RESIZE_CURSOR);
76 case NW_RESIZE:
77 return Cursor.getPredefinedCursor(Cursor.NW_RESIZE_CURSOR);
78 case NE_RESIZE:
79 return Cursor.getPredefinedCursor(Cursor.NE_RESIZE_CURSOR);
80 case N_RESIZE:
81 case V_RESIZE:
82 return Cursor.getPredefinedCursor(Cursor.N_RESIZE_CURSOR);
88 case E_RESIZE:
89 return Cursor.getPredefinedCursor(Cursor.E_RESIZE_CURSOR);
90 case OPEN_HAND:
91 case CLOSED_HAND:
92 case HAND:
93 return Cursor.getPredefinedCursor(Cursor.HAND_CURSOR);
94 case MOVE:
95 return Cursor.getPredefinedCursor(Cursor.MOVE_CURSOR);
96 // Not implemented, use default cursor instead
97 case DISAPPEAR:
98 return Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR);
99 case NONE:
100 return null;
101 case IMAGE:
102 return createCustomCursor((ImageCursorFrame) cursorFrame);
103 }
104
105 return Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR);
106 }
107
108 public static javafx.scene.Cursor embedCursorToCursor(Cursor cursor) {
109 if (cursor == null) {
110 return javafx.scene.Cursor.DEFAULT;
111 }
112
113 switch (cursor.getType()) {
114 case Cursor.DEFAULT_CURSOR:
115 return javafx.scene.Cursor.DEFAULT;
116 case Cursor.CROSSHAIR_CURSOR:
117 return javafx.scene.Cursor.CROSSHAIR;
118 case Cursor.E_RESIZE_CURSOR:
119 return javafx.scene.Cursor.E_RESIZE;
120 case Cursor.HAND_CURSOR:
121 return javafx.scene.Cursor.HAND;
122 case Cursor.MOVE_CURSOR:
123 return javafx.scene.Cursor.MOVE;
124 case Cursor.N_RESIZE_CURSOR:
125 return javafx.scene.Cursor.N_RESIZE;
126 case Cursor.NE_RESIZE_CURSOR:
127 return javafx.scene.Cursor.NE_RESIZE;
128 case Cursor.NW_RESIZE_CURSOR:
|