src/macosx/classes/sun/lwawt/macosx/CPlatformResponder.java

Print this page




  24  */
  25 
  26 package sun.lwawt.macosx;
  27 
  28 import sun.awt.SunToolkit;
  29 import sun.lwawt.LWWindowPeer;
  30 import sun.lwawt.macosx.event.NSEvent;
  31 import java.awt.Toolkit;
  32 import java.awt.event.MouseEvent;
  33 import java.awt.event.InputEvent;
  34 import java.awt.event.MouseWheelEvent;
  35 import java.awt.event.KeyEvent;
  36 
  37 /**
  38  * Translates NSEvents/NPCocoaEvents into AWT events.
  39  */
  40 final class CPlatformResponder {
  41 
  42     private final LWWindowPeer peer;
  43     private final boolean isNpapiCallback;

  44 
  45     CPlatformResponder(final LWWindowPeer peer, final boolean isNpapiCallback) {
  46         this.peer = peer;
  47         this.isNpapiCallback = isNpapiCallback;
  48     }
  49 
  50     /**
  51      * Handles mouse events.
  52      */
  53     void handleMouseEvent(int eventType, int modifierFlags, int buttonNumber,
  54                           int clickCount, int x, int y, int absoluteX,
  55                           int absoluteY) {
  56         final SunToolkit tk = (SunToolkit)Toolkit.getDefaultToolkit();
  57         if ((buttonNumber > 2 && !tk.areExtraMouseButtonsEnabled())
  58                 || buttonNumber > tk.getNumberOfButtons() - 1) {
  59             return;
  60         }
  61 
  62         int jeventType = isNpapiCallback ? NSEvent.npToJavaEventType(eventType) :
  63                                            NSEvent.nsToJavaEventType(eventType);


 166             }
 167 
 168             jkeyCode = out[0];
 169             jkeyLocation = out[1];
 170             jeventType = isNpapiCallback ? NSEvent.npToJavaEventType(eventType) :
 171                                            NSEvent.nsToJavaEventType(eventType);
 172         }
 173 
 174         char javaChar = NSEvent.nsToJavaChar(testChar, modifierFlags);
 175         // Some keys may generate a KEY_TYPED, but we can't determine
 176         // what that character is. That's likely a bug, but for now we
 177         // just check for CHAR_UNDEFINED.
 178         if (javaChar == KeyEvent.CHAR_UNDEFINED) {
 179             postsTyped = false;
 180         }
 181 
 182 
 183         int jmodifiers = NSEvent.nsToJavaKeyModifiers(modifierFlags);
 184         long when = System.currentTimeMillis();
 185 



 186         peer.dispatchKeyEvent(jeventType, when, jmodifiers,
 187                               jkeyCode, javaChar, jkeyLocation);
 188 
 189         // Current browser may be sending input events, so don't
 190         // post the KEY_TYPED here.
 191         postsTyped &= needsKeyTyped;
 192 
 193         // That's the reaction on the PRESSED (not RELEASED) event as it comes to
 194         // appear in MacOSX.
 195         // Modifier keys (shift, etc) don't want to send TYPED events.
 196         // On the other hand we don't want to generate keyTyped events
 197         // for clipboard related shortcuts like Meta + [CVX]
 198         boolean isMetaDown = (jmodifiers & KeyEvent.META_DOWN_MASK) != 0;
 199         if (jeventType == KeyEvent.KEY_PRESSED && postsTyped && !isMetaDown) {
 200             peer.dispatchKeyEvent(KeyEvent.KEY_TYPED, when, jmodifiers,
 201                                   KeyEvent.VK_UNDEFINED, javaChar,
 202                                   KeyEvent.KEY_LOCATION_UNKNOWN);
 203         }
 204     }
 205 
 206     void handleInputEvent(String text) {
 207         if (text != null) {
 208             int index = 0, length = text.length();
 209             char c;
 210             while (index < length) {
 211                 c = text.charAt(index);
 212                 peer.dispatchKeyEvent(KeyEvent.KEY_TYPED,
 213                                       System.currentTimeMillis(),
 214                                       0, KeyEvent.VK_UNDEFINED, c,
 215                                       KeyEvent.KEY_LOCATION_UNKNOWN);




 216                 index++;
 217             }
 218         }
 219     }
 220 
 221     void handleWindowFocusEvent(boolean gained, LWWindowPeer opposite) {
 222         peer.notifyActivation(gained, opposite);
 223     }
 224 }


  24  */
  25 
  26 package sun.lwawt.macosx;
  27 
  28 import sun.awt.SunToolkit;
  29 import sun.lwawt.LWWindowPeer;
  30 import sun.lwawt.macosx.event.NSEvent;
  31 import java.awt.Toolkit;
  32 import java.awt.event.MouseEvent;
  33 import java.awt.event.InputEvent;
  34 import java.awt.event.MouseWheelEvent;
  35 import java.awt.event.KeyEvent;
  36 
  37 /**
  38  * Translates NSEvents/NPCocoaEvents into AWT events.
  39  */
  40 final class CPlatformResponder {
  41 
  42     private final LWWindowPeer peer;
  43     private final boolean isNpapiCallback;
  44     private int lastKeyPressCode = KeyEvent.VK_UNDEFINED;
  45 
  46     CPlatformResponder(final LWWindowPeer peer, final boolean isNpapiCallback) {
  47         this.peer = peer;
  48         this.isNpapiCallback = isNpapiCallback;
  49     }
  50 
  51     /**
  52      * Handles mouse events.
  53      */
  54     void handleMouseEvent(int eventType, int modifierFlags, int buttonNumber,
  55                           int clickCount, int x, int y, int absoluteX,
  56                           int absoluteY) {
  57         final SunToolkit tk = (SunToolkit)Toolkit.getDefaultToolkit();
  58         if ((buttonNumber > 2 && !tk.areExtraMouseButtonsEnabled())
  59                 || buttonNumber > tk.getNumberOfButtons() - 1) {
  60             return;
  61         }
  62 
  63         int jeventType = isNpapiCallback ? NSEvent.npToJavaEventType(eventType) :
  64                                            NSEvent.nsToJavaEventType(eventType);


 167             }
 168 
 169             jkeyCode = out[0];
 170             jkeyLocation = out[1];
 171             jeventType = isNpapiCallback ? NSEvent.npToJavaEventType(eventType) :
 172                                            NSEvent.nsToJavaEventType(eventType);
 173         }
 174 
 175         char javaChar = NSEvent.nsToJavaChar(testChar, modifierFlags);
 176         // Some keys may generate a KEY_TYPED, but we can't determine
 177         // what that character is. That's likely a bug, but for now we
 178         // just check for CHAR_UNDEFINED.
 179         if (javaChar == KeyEvent.CHAR_UNDEFINED) {
 180             postsTyped = false;
 181         }
 182 
 183 
 184         int jmodifiers = NSEvent.nsToJavaKeyModifiers(modifierFlags);
 185         long when = System.currentTimeMillis();
 186 
 187         if (jeventType == KeyEvent.KEY_PRESSED) {
 188             lastKeyPressCode = jkeyCode;
 189         }
 190         peer.dispatchKeyEvent(jeventType, when, jmodifiers,
 191                               jkeyCode, javaChar, jkeyLocation);
 192 
 193         // Current browser may be sending input events, so don't
 194         // post the KEY_TYPED here.
 195         postsTyped &= needsKeyTyped;
 196 
 197         // That's the reaction on the PRESSED (not RELEASED) event as it comes to
 198         // appear in MacOSX.
 199         // Modifier keys (shift, etc) don't want to send TYPED events.
 200         // On the other hand we don't want to generate keyTyped events
 201         // for clipboard related shortcuts like Meta + [CVX]
 202         boolean isMetaDown = (jmodifiers & KeyEvent.META_DOWN_MASK) != 0;
 203         if (jeventType == KeyEvent.KEY_PRESSED && postsTyped && !isMetaDown) {
 204             peer.dispatchKeyEvent(KeyEvent.KEY_TYPED, when, jmodifiers,
 205                                   KeyEvent.VK_UNDEFINED, javaChar,
 206                                   KeyEvent.KEY_LOCATION_UNKNOWN);
 207         }
 208     }
 209 
 210     void handleInputEvent(String text) {
 211         if (text != null) {
 212             int index = 0, length = text.length();
 213             char c;
 214             while (index < length) {
 215                 c = text.charAt(index);
 216                 peer.dispatchKeyEvent(KeyEvent.KEY_TYPED,
 217                         System.currentTimeMillis(),
 218                         0, KeyEvent.VK_UNDEFINED, c,
 219                         KeyEvent.KEY_LOCATION_UNKNOWN);
 220                 peer.dispatchKeyEvent(KeyEvent.KEY_RELEASED,
 221                         System.currentTimeMillis(),
 222                         0, lastKeyPressCode, c,
 223                         KeyEvent.KEY_LOCATION_UNKNOWN);
 224                 index++;
 225             }
 226         }
 227     }
 228 
 229     void handleWindowFocusEvent(boolean gained, LWWindowPeer opposite) {
 230         peer.notifyActivation(gained, opposite);
 231     }
 232 }