diff options
Diffstat (limited to 'awt/org/apache/harmony/awt/wtk/NativeEvent.java')
-rw-r--r-- | awt/org/apache/harmony/awt/wtk/NativeEvent.java | 268 |
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; + } +} |