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 package sun.awt.X11;
26
27 import java.awt.*;
28 import java.awt.peer.*;
29
30 import sun.awt.AWTAccessor;
31 import sun.awt.SunToolkit;
32 import sun.awt.UNIXToolkit;
33 import sun.awt.X11GraphicsConfig;
34 import sun.awt.X11GraphicsEnvironment;
35
36 class XRobotPeer implements RobotPeer {
37
38 private static volatile boolean isGtkSupported;
39 private X11GraphicsConfig xgc = null;
40 /*
41 * native implementation uses some static shared data (pipes, processes)
42 * so use a class lock to synchronize native method calls
43 */
44 static Object robotLock = new Object();
45
46 XRobotPeer(GraphicsConfiguration gc) {
47 this.xgc = (X11GraphicsConfig)gc;
48 SunToolkit tk = (SunToolkit)Toolkit.getDefaultToolkit();
49 setup(tk.getNumberOfButtons(),
50 AWTAccessor.getInputEventAccessor().getButtonDownMasks());
51
52 Toolkit toolkit = Toolkit.getDefaultToolkit();
53 if (!isGtkSupported) {
54 if (toolkit instanceof UNIXToolkit
55 && ((UNIXToolkit) toolkit).loadGTK()) {
56 isGtkSupported = true;
57 }
58 }
59 }
60
61 @Override
62 public void dispose() {
63 // does nothing
64 }
65
66 @Override
67 public void mouseMove(int x, int y) {
68 X11GraphicsEnvironment x11ge = (X11GraphicsEnvironment)
69 GraphicsEnvironment.getLocalGraphicsEnvironment();
70 if(x11ge.runningXinerama()) {
71 Rectangle sb = xgc.getBounds();
72 mouseMoveImpl(xgc, xgc.scaleUp(x + sb.x), xgc.scaleUp(y + sb.y));
73 } else {
74 mouseMoveImpl(xgc, xgc.scaleUp(x), xgc.scaleUp(y));
75 }
76 }
77
78 @Override
87
88 @Override
89 public void mouseWheel(int wheelAmt) {
90 mouseWheelImpl(wheelAmt);
91 }
92
93 @Override
94 public void keyPress(int keycode) {
95 keyPressImpl(keycode);
96 }
97
98 @Override
99 public void keyRelease(int keycode) {
100 keyReleaseImpl(keycode);
101 }
102
103 @Override
104 public int getRGBPixel(int x, int y) {
105 int pixelArray[] = new int[1];
106 getRGBPixelsImpl(xgc, x, y, 1, 1, xgc.getScale(), pixelArray,
107 isGtkSupported);
108 return pixelArray[0];
109 }
110
111 @Override
112 public int [] getRGBPixels(Rectangle bounds) {
113 int pixelArray[] = new int[bounds.width*bounds.height];
114 getRGBPixelsImpl(xgc, bounds.x, bounds.y, bounds.width, bounds.height,
115 xgc.getScale(), pixelArray, isGtkSupported);
116 return pixelArray;
117 }
118
119 private static synchronized native void setup(int numberOfButtons, int[] buttonDownMasks);
120
121 private static synchronized native void mouseMoveImpl(X11GraphicsConfig xgc, int x, int y);
122 private static synchronized native void mousePressImpl(int buttons);
123 private static synchronized native void mouseReleaseImpl(int buttons);
124 private static synchronized native void mouseWheelImpl(int wheelAmt);
125
126 private static synchronized native void keyPressImpl(int keycode);
127 private static synchronized native void keyReleaseImpl(int keycode);
128
129 private static synchronized native void getRGBPixelsImpl(X11GraphicsConfig xgc,
130 int x, int y, int width, int height, int scale,
131 int pixelArray[], boolean isGtkSupported);
132 }
|
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 package sun.awt.X11;
26
27 import java.awt.*;
28 import java.awt.peer.*;
29
30 import sun.awt.AWTAccessor;
31 import sun.awt.SunToolkit;
32 import sun.awt.UNIXToolkit;
33 import sun.awt.X11GraphicsConfig;
34 import sun.awt.X11GraphicsEnvironment;
35
36 class XRobotPeer implements RobotPeer {
37
38 static final boolean tryGtk;
39 static {
40 loadNativeLibraries();
41 tryGtk = Boolean.getBoolean("awt.robot.gtk");
42 }
43
44 private static boolean isGtkSupported = false;
45 private static volatile boolean useGtk;
46 private X11GraphicsConfig xgc = null;
47
48 /*
49 * native implementation uses some static shared data (pipes, processes)
50 * so use a class lock to synchronize native method calls
51 */
52 static Object robotLock = new Object();
53
54 XRobotPeer(GraphicsConfiguration gc) {
55 this.xgc = (X11GraphicsConfig)gc;
56 SunToolkit tk = (SunToolkit)Toolkit.getDefaultToolkit();
57 setup(tk.getNumberOfButtons(),
58 AWTAccessor.getInputEventAccessor().getButtonDownMasks());
59
60 boolean isGtkSupported = false;
61 if (tryGtk) {
62 if (tk instanceof UNIXToolkit && ((UNIXToolkit) tk).loadGTK()) {
63 isGtkSupported = true;
64 }
65 }
66
67 useGtk = (tryGtk && isGtkSupported);
68 }
69
70 @Override
71 public void dispose() {
72 // does nothing
73 }
74
75 @Override
76 public void mouseMove(int x, int y) {
77 X11GraphicsEnvironment x11ge = (X11GraphicsEnvironment)
78 GraphicsEnvironment.getLocalGraphicsEnvironment();
79 if(x11ge.runningXinerama()) {
80 Rectangle sb = xgc.getBounds();
81 mouseMoveImpl(xgc, xgc.scaleUp(x + sb.x), xgc.scaleUp(y + sb.y));
82 } else {
83 mouseMoveImpl(xgc, xgc.scaleUp(x), xgc.scaleUp(y));
84 }
85 }
86
87 @Override
96
97 @Override
98 public void mouseWheel(int wheelAmt) {
99 mouseWheelImpl(wheelAmt);
100 }
101
102 @Override
103 public void keyPress(int keycode) {
104 keyPressImpl(keycode);
105 }
106
107 @Override
108 public void keyRelease(int keycode) {
109 keyReleaseImpl(keycode);
110 }
111
112 @Override
113 public int getRGBPixel(int x, int y) {
114 int pixelArray[] = new int[1];
115 getRGBPixelsImpl(xgc, x, y, 1, 1, xgc.getScale(), pixelArray,
116 useGtk);
117 return pixelArray[0];
118 }
119
120 @Override
121 public int [] getRGBPixels(Rectangle bounds) {
122 int pixelArray[] = new int[bounds.width*bounds.height];
123 getRGBPixelsImpl(xgc, bounds.x, bounds.y, bounds.width, bounds.height,
124 xgc.getScale(), pixelArray, useGtk);
125 return pixelArray;
126 }
127
128 private static synchronized native void setup(int numberOfButtons, int[] buttonDownMasks);
129 private static native void loadNativeLibraries();
130
131 private static synchronized native void mouseMoveImpl(X11GraphicsConfig xgc, int x, int y);
132 private static synchronized native void mousePressImpl(int buttons);
133 private static synchronized native void mouseReleaseImpl(int buttons);
134 private static synchronized native void mouseWheelImpl(int wheelAmt);
135
136 private static synchronized native void keyPressImpl(int keycode);
137 private static synchronized native void keyReleaseImpl(int keycode);
138
139 private static synchronized native void getRGBPixelsImpl(X11GraphicsConfig xgc,
140 int x, int y, int width, int height, int scale,
141 int pixelArray[], boolean isGtkSupported);
142 }
|