/* * 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; } }