src/macosx/native/sun/awt/AWTView.m

Print this page




  65 // Note: Must be called on main (AppKit) thread only
  66 - (id) initWithRect: (NSRect) rect
  67        platformView: (jobject) cPlatformView
  68        windowLayer: (CALayer*) windowLayer
  69 {
  70 AWT_ASSERT_APPKIT_THREAD;
  71     // Initialize ourselves
  72     self = [super initWithFrame: rect];
  73     if (self == nil) return self;
  74 
  75     m_cPlatformView = cPlatformView;
  76     fInputMethodLOCKABLE = NULL;
  77     fKeyEventsNeeded = NO;
  78     fProcessingKeystroke = NO;
  79 
  80     fEnablePressAndHold = shouldUsePressAndHold();
  81     fInPressAndHold = NO;
  82     fPAHNeedsToSelect = NO;
  83 
  84     mouseIsOver = NO;

  85 
  86     if (windowLayer != nil) {
  87         self.cglLayer = windowLayer;
  88         [self setWantsLayer: YES];
  89         [self.layer addSublayer: (CALayer *)cglLayer];
  90         [self setLayerContentsRedrawPolicy: NSViewLayerContentsRedrawDuringViewResize];
  91         [self setLayerContentsPlacement: NSViewLayerContentsPlacementTopLeft];
  92         [self setAutoresizingMask: NSViewHeightSizable | NSViewWidthSizable];
  93 
  94 #ifdef REMOTELAYER
  95         CGLLayer *parentLayer = (CGLLayer*)self.cglLayer;
  96         parentLayer.parentLayer = NULL;
  97         parentLayer.remoteLayer = NULL;
  98         if (JRSRemotePort != 0 && remoteSocketFD > 0) {
  99             CGLLayer *remoteLayer = [[CGLLayer alloc] initWithJavaLayer: parentLayer.javaLayer];
 100             remoteLayer.target = GL_TEXTURE_2D;
 101             NSLog(@"Creating Parent=%p, Remote=%p", parentLayer, remoteLayer);
 102             parentLayer.remoteLayer = remoteLayer;
 103             remoteLayer.parentLayer = parentLayer;
 104             remoteLayer.remoteLayer = NULL;


 129     {
 130         JNIEnv *env = [ThreadUtilities getJNIEnvUncached];
 131 
 132         JNFDeleteGlobalRef(env, fInputMethodLOCKABLE);
 133         fInputMethodLOCKABLE = NULL;
 134     }
 135 
 136 
 137     [super dealloc];
 138 }
 139 
 140 - (void) viewDidMoveToWindow {
 141 AWT_ASSERT_APPKIT_THREAD;
 142 
 143     [AWTToolkit eventCountPlusPlus];
 144 
 145     [JNFRunLoop performOnMainThreadWaiting:NO withBlock:^() {
 146         [[self window] makeFirstResponder: self];
 147     }];
 148     if ([self window] != NULL) {
 149         [self resetTrackingRect];
 150     }
 151 }
 152 
 153 - (BOOL) acceptsFirstMouse: (NSEvent *)event {
 154     return YES;
 155 }
 156 
 157 - (BOOL) acceptsFirstResponder {
 158     return YES;
 159 }
 160 
 161 - (BOOL) becomeFirstResponder {
 162     return YES;
 163 }
 164 
 165 - (BOOL) preservesContentDuringLiveResize {
 166     return YES;
 167 }
 168 
 169 /*


 351     static JNF_CTOR_CACHE(jctor_NSEvent, jc_NSEvent, "(IIIIIIIIDD)V");
 352     jobject jEvent = JNFNewObject(env, jctor_NSEvent,
 353                                   [event type],
 354                                   [event modifierFlags],
 355                                   clickCount,
 356                                   [event buttonNumber],
 357                                   (jint)localPoint.x, (jint)localPoint.y,
 358                                   (jint)absP.x, (jint)absP.y,
 359                                   [event deltaY],
 360                                   [event deltaX]);
 361     if (jEvent == nil) {
 362         // Unable to create event by some reason.
 363         return;
 364     }
 365 
 366     static JNF_CLASS_CACHE(jc_PlatformView, "sun/lwawt/macosx/CPlatformView");
 367     static JNF_MEMBER_CACHE(jm_deliverMouseEvent, jc_PlatformView, "deliverMouseEvent", "(Lsun/lwawt/macosx/event/NSEvent;)V");
 368     JNFCallVoidMethod(env, m_cPlatformView, jm_deliverMouseEvent, jEvent);
 369 }
 370 
 371 
 372 - (void) clearTrackingRect {
 373     if (rolloverTrackingRectTag > 0) {
 374         [self removeTrackingRect:rolloverTrackingRectTag];
 375         rolloverTrackingRectTag = 0;
 376     }
 377 }
 378 
 379 - (void) resetTrackingRect {
 380     [self clearTrackingRect];
 381     rolloverTrackingRectTag = [self addTrackingRect:[self visibleRect]



 382                                               owner:self
 383                                            userData:NULL
 384                                        assumeInside:NO];

 385 }
 386 
 387 - (void)updateTrackingAreas {
 388     [super updateTrackingAreas];
 389     [self resetTrackingRect];
 390 }
 391 
 392 - (void) resetCursorRects {
 393     [super resetCursorRects];
 394     [self resetTrackingRect];
 395 }
 396 
 397 -(void) deliverJavaKeyEventHelper: (NSEvent *) event {
 398     static NSEvent* sLastKeyEvent = nil;
 399     if (event == sLastKeyEvent) {
 400         // The event is repeatedly delivered by keyDown: after performKeyEquivalent:
 401         return;
 402     }
 403     [sLastKeyEvent release];
 404     sLastKeyEvent = [event retain];
 405         
 406     [AWTToolkit eventCountPlusPlus];
 407     JNIEnv *env = [ThreadUtilities getJNIEnv];
 408 
 409     jstring characters = NULL;
 410     if ([event type] != NSFlagsChanged) {
 411         characters = JNFNSToJavaString(env, [event characters]);
 412     }
 413 
 414     static JNF_CLASS_CACHE(jc_NSEvent, "sun/lwawt/macosx/event/NSEvent");




  65 // Note: Must be called on main (AppKit) thread only
  66 - (id) initWithRect: (NSRect) rect
  67        platformView: (jobject) cPlatformView
  68        windowLayer: (CALayer*) windowLayer
  69 {
  70 AWT_ASSERT_APPKIT_THREAD;
  71     // Initialize ourselves
  72     self = [super initWithFrame: rect];
  73     if (self == nil) return self;
  74 
  75     m_cPlatformView = cPlatformView;
  76     fInputMethodLOCKABLE = NULL;
  77     fKeyEventsNeeded = NO;
  78     fProcessingKeystroke = NO;
  79 
  80     fEnablePressAndHold = shouldUsePressAndHold();
  81     fInPressAndHold = NO;
  82     fPAHNeedsToSelect = NO;
  83 
  84     mouseIsOver = NO;
  85     [self resetTrackingArea];
  86 
  87     if (windowLayer != nil) {
  88         self.cglLayer = windowLayer;
  89         [self setWantsLayer: YES];
  90         [self.layer addSublayer: (CALayer *)cglLayer];
  91         [self setLayerContentsRedrawPolicy: NSViewLayerContentsRedrawDuringViewResize];
  92         [self setLayerContentsPlacement: NSViewLayerContentsPlacementTopLeft];
  93         [self setAutoresizingMask: NSViewHeightSizable | NSViewWidthSizable];
  94 
  95 #ifdef REMOTELAYER
  96         CGLLayer *parentLayer = (CGLLayer*)self.cglLayer;
  97         parentLayer.parentLayer = NULL;
  98         parentLayer.remoteLayer = NULL;
  99         if (JRSRemotePort != 0 && remoteSocketFD > 0) {
 100             CGLLayer *remoteLayer = [[CGLLayer alloc] initWithJavaLayer: parentLayer.javaLayer];
 101             remoteLayer.target = GL_TEXTURE_2D;
 102             NSLog(@"Creating Parent=%p, Remote=%p", parentLayer, remoteLayer);
 103             parentLayer.remoteLayer = remoteLayer;
 104             remoteLayer.parentLayer = parentLayer;
 105             remoteLayer.remoteLayer = NULL;


 130     {
 131         JNIEnv *env = [ThreadUtilities getJNIEnvUncached];
 132 
 133         JNFDeleteGlobalRef(env, fInputMethodLOCKABLE);
 134         fInputMethodLOCKABLE = NULL;
 135     }
 136 
 137 
 138     [super dealloc];
 139 }
 140 
 141 - (void) viewDidMoveToWindow {
 142 AWT_ASSERT_APPKIT_THREAD;
 143 
 144     [AWTToolkit eventCountPlusPlus];
 145 
 146     [JNFRunLoop performOnMainThreadWaiting:NO withBlock:^() {
 147         [[self window] makeFirstResponder: self];
 148     }];
 149     if ([self window] != NULL) {
 150         [self resetTrackingArea];
 151     }
 152 }
 153 
 154 - (BOOL) acceptsFirstMouse: (NSEvent *)event {
 155     return YES;
 156 }
 157 
 158 - (BOOL) acceptsFirstResponder {
 159     return YES;
 160 }
 161 
 162 - (BOOL) becomeFirstResponder {
 163     return YES;
 164 }
 165 
 166 - (BOOL) preservesContentDuringLiveResize {
 167     return YES;
 168 }
 169 
 170 /*


 352     static JNF_CTOR_CACHE(jctor_NSEvent, jc_NSEvent, "(IIIIIIIIDD)V");
 353     jobject jEvent = JNFNewObject(env, jctor_NSEvent,
 354                                   [event type],
 355                                   [event modifierFlags],
 356                                   clickCount,
 357                                   [event buttonNumber],
 358                                   (jint)localPoint.x, (jint)localPoint.y,
 359                                   (jint)absP.x, (jint)absP.y,
 360                                   [event deltaY],
 361                                   [event deltaX]);
 362     if (jEvent == nil) {
 363         // Unable to create event by some reason.
 364         return;
 365     }
 366 
 367     static JNF_CLASS_CACHE(jc_PlatformView, "sun/lwawt/macosx/CPlatformView");
 368     static JNF_MEMBER_CACHE(jm_deliverMouseEvent, jc_PlatformView, "deliverMouseEvent", "(Lsun/lwawt/macosx/event/NSEvent;)V");
 369     JNFCallVoidMethod(env, m_cPlatformView, jm_deliverMouseEvent, jEvent);
 370 }
 371 
 372 - (void) resetTrackingArea {
 373     if (rolloverTrackingArea != nil) {
 374         [self removeTrackingArea:rolloverTrackingArea];
 375         [rolloverTrackingArea release];

 376     }

 377 
 378     int options = (NSTrackingActiveInActiveApp | NSTrackingCursorUpdate |
 379                    NSTrackingMouseEnteredAndExited | NSTrackingMouseMoved |
 380                    NSTrackingEnabledDuringMouseDrag);
 381 
 382     rolloverTrackingArea = [[NSTrackingArea alloc] initWithRect:[self visibleRect]
 383                                                         options: options
 384                                                           owner:self
 385                                                        userInfo:nil
 386                             ];
 387     [self addTrackingArea:rolloverTrackingArea];
 388 }
 389 
 390 - (void)updateTrackingAreas {
 391     [super updateTrackingAreas];
 392     [self resetTrackingArea];
 393 }
 394 
 395 - (void) resetCursorRects {
 396     [super resetCursorRects];
 397     [self resetTrackingArea];
 398 }
 399 
 400 -(void) deliverJavaKeyEventHelper: (NSEvent *) event {
 401     static NSEvent* sLastKeyEvent = nil;
 402     if (event == sLastKeyEvent) {
 403         // The event is repeatedly delivered by keyDown: after performKeyEquivalent:
 404         return;
 405     }
 406     [sLastKeyEvent release];
 407     sLastKeyEvent = [event retain];
 408         
 409     [AWTToolkit eventCountPlusPlus];
 410     JNIEnv *env = [ThreadUtilities getJNIEnv];
 411 
 412     jstring characters = NULL;
 413     if ([event type] != NSFlagsChanged) {
 414         characters = JNFNSToJavaString(env, [event characters]);
 415     }
 416 
 417     static JNF_CLASS_CACHE(jc_NSEvent, "sun/lwawt/macosx/event/NSEvent");