changeset 949:451c71b7fdb1

Changed dw_window_capture() an dw_window_release() because the mouseDragged method does this already. Filter out mouseMoved() events for hits on non-render controls to reduce lag.
author bsmith@81767d24-ef19-dc11-ae90-00e081727c95
date Sun, 01 May 2011 01:10:44 +0000
parents e48384ca49b7
children 73ff2daed8ca
files mac/dw.m
diffstat 1 files changed, 52 insertions(+), 58 deletions(-) [+]
line wrap: on
line diff
--- a/mac/dw.m	Sat Apr 30 21:50:49 2011 +0000
+++ b/mac/dw.m	Sun May 01 01:10:44 2011 +0000
@@ -424,7 +424,6 @@
 NSAutoreleasePool *pool;
 #endif
 HWND _DWLastDrawable;
-id _DWCapture;
 HMTX DWRunMutex;
 HMTX DWThreadMutex;
 HMTX DWThreadMutex2;
@@ -687,7 +686,52 @@
 @implementation DWWindow
 -(void)sendEvent:(NSEvent *)theEvent { if([theEvent type] == NSKeyDown) { _event_handler(self, theEvent, 2); } [super sendEvent:theEvent]; }
 -(void)keyDown:(NSEvent *)theEvent { }
--(void)mouseDragged:(NSEvent *)theEvent { if(_DWCapture == self) { _event_handler(self, theEvent, 5); } }
+-(void)mouseDragged:(NSEvent *)theEvent { _event_handler(self, theEvent, 5); }
+@end
+
+/* Subclass for a render area type */
+@interface DWRender : NSControl
+{
+    void *userdata;
+    NSFont *font;
+    NSSize size;
+}
+-(void *)userdata;
+-(void)setUserdata:(void *)input;
+-(void)setFont:(NSFont *)input;
+-(NSFont *)font;
+-(void)setSize:(NSSize)input;
+-(NSSize)size;
+-(void)mouseDown:(NSEvent *)theEvent;
+-(void)mouseUp:(NSEvent *)theEvent;
+-(NSMenu *)menuForEvent:(NSEvent *)theEvent;
+-(void)rightMouseUp:(NSEvent *)theEvent;
+-(void)otherMouseDown:(NSEvent *)theEvent;
+-(void)otherMouseUp:(NSEvent *)theEvent;
+-(void)drawRect:(NSRect)rect;
+-(void)keyDown:(NSEvent *)theEvent;
+-(BOOL)isFlipped;
+@end
+
+@implementation DWRender
+-(void *)userdata { return userdata; }
+-(void)setUserdata:(void *)input { userdata = input; }
+-(void)setFont:(NSFont *)input { [font release]; font = input; [font retain]; }
+-(NSFont *)font { return font; }
+-(void)setSize:(NSSize)input { size = input; }
+-(NSSize)size { return size; }
+-(void)mouseDown:(NSEvent *)theEvent { _event_handler(self, theEvent, 3); }
+-(void)mouseUp:(NSEvent *)theEvent { _event_handler(self, theEvent, 4); }
+-(NSMenu *)menuForEvent:(NSEvent *)theEvent { _event_handler(self, theEvent, 3); return nil; }
+-(void)rightMouseUp:(NSEvent *)theEvent { _event_handler(self, theEvent, 4); }
+-(void)otherMouseDown:(NSEvent *)theEvent { _event_handler(self, theEvent, 3); }
+-(void)otherMouseUp:(NSEvent *)theEvent { _event_handler(self, theEvent, 4); }
+-(void)mouseDragged:(NSEvent *)theEvent { _event_handler(self, theEvent, 5); }
+-(void)drawRect:(NSRect)rect { _event_handler(self, nil, 7); }
+-(void)keyDown:(NSEvent *)theEvent { _event_handler(self, theEvent, 2); }
+-(BOOL)isFlipped { return NO; }
+-(void)dealloc { UserData *root = userdata; _remove_userdata(&root, NULL, TRUE); [font release]; [super dealloc]; }
+-(BOOL)acceptsFirstResponder { return YES; }
 @end
 
 /* Subclass for a top-level window */
@@ -765,15 +809,15 @@
 }
 -(void)setMenu:(NSMenu *)input { windowmenu = input; [windowmenu retain]; }
 -(void)menuHandler:(id)sender { _event_handler(sender, nil, 8); }
--(void)mouseDragged:(NSEvent *)theEvent { if(_DWCapture == self) { _event_handler(self, theEvent, 5); } }
+-(void)mouseDragged:(NSEvent *)theEvent { _event_handler(self, theEvent, 5); }
 -(void)mouseMoved:(NSEvent *)theEvent 
 { 
     id hit = [self hitTest:[theEvent locationInWindow]];
     
-    if(_DWCapture == hit) 
-    { 
+    if([hit isMemberOfClass:[DWRender class]])
+    {    
         _event_handler(hit, theEvent, 5); 
-    } 
+    }
 }
 @end
 
@@ -1204,51 +1248,6 @@
 -(void)dealloc { UserData *root = userdata; _remove_userdata(&root, NULL, TRUE); [super dealloc]; }
 @end
 
-/* Subclass for a render area type */
-@interface DWRender : NSControl
-{
-    void *userdata;
-    NSFont *font;
-    NSSize size;
-}
--(void *)userdata;
--(void)setUserdata:(void *)input;
--(void)setFont:(NSFont *)input;
--(NSFont *)font;
--(void)setSize:(NSSize)input;
--(NSSize)size;
--(void)mouseDown:(NSEvent *)theEvent;
--(void)mouseUp:(NSEvent *)theEvent;
--(NSMenu *)menuForEvent:(NSEvent *)theEvent;
--(void)rightMouseUp:(NSEvent *)theEvent;
--(void)otherMouseDown:(NSEvent *)theEvent;
--(void)otherMouseUp:(NSEvent *)theEvent;
--(void)drawRect:(NSRect)rect;
--(void)keyDown:(NSEvent *)theEvent;
--(BOOL)isFlipped;
-@end
-
-@implementation DWRender
--(void *)userdata { return userdata; }
--(void)setUserdata:(void *)input { userdata = input; }
--(void)setFont:(NSFont *)input { [font release]; font = input; [font retain]; }
--(NSFont *)font { return font; }
--(void)setSize:(NSSize)input { size = input; }
--(NSSize)size { return size; }
--(void)mouseDown:(NSEvent *)theEvent { _event_handler(self, theEvent, 3); }
--(void)mouseUp:(NSEvent *)theEvent { _event_handler(self, theEvent, 4); }
--(NSMenu *)menuForEvent:(NSEvent *)theEvent { _event_handler(self, theEvent, 3); return nil; }
--(void)rightMouseUp:(NSEvent *)theEvent { _event_handler(self, theEvent, 4); }
--(void)otherMouseDown:(NSEvent *)theEvent { _event_handler(self, theEvent, 3); }
--(void)otherMouseUp:(NSEvent *)theEvent { _event_handler(self, theEvent, 4); }
--(void)mouseDragged:(NSEvent *)theEvent { if(_DWCapture == self) { _event_handler(self, theEvent, 5); } }
--(void)drawRect:(NSRect)rect { _event_handler(self, nil, 7); }
--(void)keyDown:(NSEvent *)theEvent { _event_handler(self, theEvent, 2); }
--(BOOL)isFlipped { return NO; }
--(void)dealloc { UserData *root = userdata; _remove_userdata(&root, NULL, TRUE); [font release]; [super dealloc]; }
--(BOOL)acceptsFirstResponder { return YES; }
-@end
-
 /* Subclass for a MLE type */
 @interface DWMLE : NSTextView
 {
@@ -7062,9 +7061,7 @@
  */
 void API dw_window_capture(HWND handle)
 {
-    id object = handle;
-    
-    _DWCapture = object;
+    /* Don't do anything for now */
 }
 
 /*
@@ -7072,10 +7069,7 @@
  */
 void API dw_window_release(void)
 {
-    if(_DWCapture)
-    {
-        _DWCapture = nil;
-    }
+    /* Don't do anything for now */
 }
 
 /*