summaryrefslogtreecommitdiffstats
path: root/awt/org/apache/harmony/awt/wtk/NativeEvent.java
diff options
context:
space:
mode:
Diffstat (limited to 'awt/org/apache/harmony/awt/wtk/NativeEvent.java')
-rw-r--r--awt/org/apache/harmony/awt/wtk/NativeEvent.java268
1 files changed, 268 insertions, 0 deletions
diff --git a/awt/org/apache/harmony/awt/wtk/NativeEvent.java b/awt/org/apache/harmony/awt/wtk/NativeEvent.java
new file mode 100644
index 0000000..1471c1a
--- /dev/null
+++ b/awt/org/apache/harmony/awt/wtk/NativeEvent.java
@@ -0,0 +1,268 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+/**
+ * @author Mikhail Danilov
+ * @version $Revision$
+ */
+package org.apache.harmony.awt.wtk;
+
+import java.awt.Insets;
+import java.awt.Rectangle;
+import java.awt.Point;
+import java.awt.event.KeyEvent;
+
+import org.apache.harmony.awt.gl.MultiRectArea;
+
+
+/**
+ * The interface describing cross-platform translation of system
+ * messages.
+ *
+ * <p/>Some messages can appear only on specific platform,
+ * but they still can have cross-platform interpretation if the
+ * application should be aware of them and can react using
+ * cross-platform API.
+ *
+ */
+public abstract class NativeEvent {
+
+ /**
+ * Message has no common cross-platform
+ * interpretation and should be skipped.
+ */
+ public static final int ID_PLATFORM = 0;
+
+ /**
+ * Window bounds have changed.
+ */
+ public static final int ID_BOUNDS_CHANGED = -1;
+
+ /**
+ * Window decoration size has changed.
+ */
+ public static final int ID_INSETS_CHANGED = -2;
+
+ /**
+ * Window was just created (WM_CREATE on Windows)
+ */
+ public static final int ID_CREATED = -3;
+
+ /**
+ * Mouse grab was canceled by the native system
+ */
+ public static final int ID_MOUSE_GRAB_CANCELED = -4;
+
+ /**
+ * System color scheme or visual theme was changed
+ */
+ public static final int ID_THEME_CHANGED = -5;
+
+ protected long windowId;
+ protected int eventId;
+ protected long otherWindowId;
+
+ protected Point screenPos;
+ protected Point localPos;
+ protected Rectangle windowRect;
+
+ protected int modifiers;
+ protected int mouseButton;
+ protected int wheelRotation;
+
+ protected KeyInfo keyInfo = new KeyInfo();
+
+ protected int windowState = -1;
+ protected long time;
+
+ /**
+ * Returns the system window id of the event recipient.
+ * @return HWND on Windows, xwindnow on X
+ */
+ public long getWindowId() {
+ return windowId;
+ }
+
+ /**
+ * Returns cross-platform event id
+ * should be one of ID_* constants or
+ * id constants from java.awt.AWTEvent subclasess
+ * @return cross-platform event id
+ */
+ public int getEventId() {
+ return eventId;
+ }
+
+ /**
+ * Returns the position of cursor when event occured relative to
+ * top-left corner of recipient window
+ * @return position of cursor in local coordinates
+ */
+ public Point getLocalPos() {
+ return localPos;
+ }
+
+ /**
+ * Returns the position of cursor when event occured
+ * in screen coordinates.
+ * @return position of cursor in screen coordinates
+ */
+ public Point getScreenPos() {
+ return screenPos;
+ }
+
+ /**
+ * The recipient window bounds when the event occured
+ * @return window bounds
+ */
+ public Rectangle getWindowRect() {
+ return windowRect;
+ }
+
+ /**
+ * Returns the state of keyboard and mouse buttons when the event
+ * occured if event from mouse or keyboard, for other events can
+ * return junk values. The value is bitwise OR of
+ * java.awt.event.InputEvent *_DOWN constants.
+ *
+ * Method is aware of system mouse button swap for left-hand
+ * mouse and return swapped values.
+ * @return bitwise OR of java.awt.event.InputEvent *_DOWN constants
+ */
+ public int getInputModifiers() {
+ return modifiers;
+ }
+
+ /**
+ * Returns the iconified/maximized state of recipient window if
+ * event is state related, for other events can junk values.
+ * The value has the same meaning as Frame.getExtendedState
+ * It's bitwise OR of ICONIFIED, MAXIMIZED_HORIZ, MAXIMIZED_VERT
+ * @return bitwise OR of ICONIFIED, MAXIMIZED_HORIZ, MAXIMIZED_VERT
+ */
+ public int getWindowState() {
+ return windowState;
+ }
+
+ /**
+ * The same meaning as java.awt.event.getKeyCode
+ * @return java.awt.event VK_* constant
+ */
+ public int getVKey() {
+ return (keyInfo != null) ? keyInfo.vKey : KeyInfo.DEFAULT_VKEY;
+ }
+
+ /**
+ * The same meaning as java.awt.event.getKeyLocation
+ * @return java.awt.event KEY_LOCATION_* constant
+ */
+ public int getKeyLocation() {
+ return (keyInfo != null) ? keyInfo.keyLocation : KeyInfo.DEFAULT_LOCATION;
+ }
+
+ /**
+ * Return the string of characters associated with the event
+ * Has meaning only for KEY_PRESSED as should be translated to
+ * serie of KEY_TYPED events. For dead keys and input methods
+ * one key press can generate multiple key chars.
+ * @return string of characters
+ */
+ public StringBuffer getKeyChars() {
+ if (keyInfo == null) {
+ return null;
+ }
+ if (keyInfo.vKey == KeyEvent.VK_ENTER) {
+ keyInfo.keyChars.setLength(0);
+ keyInfo.setKeyChars('\n');
+ }
+ return keyInfo.keyChars;
+ }
+
+ public char getLastChar() {
+ if (keyInfo == null || keyInfo.keyChars.length() == 0) {
+ return KeyEvent.CHAR_UNDEFINED;
+ }
+ return keyInfo.keyChars.charAt(keyInfo.keyChars.length()-1);
+ }
+
+ /**
+ * Returns the number of mouse button which changed it's state,
+ * otherwise 0.
+ * Left button is 1, middle button is 2, right button is 3.
+ *
+ * Method is aware of system mouse button swap for left-hand
+ * mouse and return swapped values.
+ * @return mouse button number
+ */
+ public int getMouseButton() {
+ return mouseButton;
+ }
+
+ /**
+ * Returns time when the message was received
+ * @return time in milliseconds
+ */
+ public long getTime() {
+ return time;
+ }
+
+ /**
+ * For the focus event contains the oposite window.
+ * This means it lost focus if recipient gains it,
+ * or will gain focus if recipient looses it.
+ * @return HWND on Windows, xwindnow on X
+ */
+ public long getOtherWindowId() {
+ return otherWindowId;
+ }
+
+ /**
+ * Returns the "dirty" area of the window as set of non-intersecting
+ * rectangles. This area is to be painted.
+ * @return non-empty array of null if empty
+ */
+ public abstract MultiRectArea getClipRects();
+
+ /**
+ * Returns the "dirty" area of the window as one rectangle.
+ * This area is to be painted.
+ * @return non-null Rectangle
+ */
+ public abstract Rectangle getClipBounds();
+
+ /**
+ * Returns the window insets. Insets is area which belongs to
+ * window somehow but is outside of it's client area,
+ * it usually contains system provided border and titlebar.
+ * @return non-null java.awt.Insets
+ */
+ public abstract Insets getInsets();
+
+ /**
+ * Returns true if event is popup menu trigger.
+ * @return boolean flag
+ */
+ public abstract boolean getTrigger();
+
+ /**
+ * Returns the number of "clicks" the mouse wheel was rotated.
+ * @return negative values if the mouse wheel was rotated up/away from the user,
+ * and positive values if the mouse wheel was rotated down/ towards the user
+ */
+ public int getWheelRotation() {
+ return wheelRotation;
+ }
+}