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");
|