LayoutTests:
authordarin <darin@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 1 Aug 2006 06:00:32 +0000 (06:00 +0000)
committerdarin <darin@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 1 Aug 2006 06:00:32 +0000 (06:00 +0000)
        Reviewed by Maciej.

        - fix http://bugzilla.opendarwin.org/show_bug.cgi?id=10171
          REGRESSION: failing layout test: fast/events/objc-event-api.html

        * fast/events/objc-event-api-expected.txt: Updated test results for changes in the
        DumpRenderTree tool.

WebKitTools:

        Reviewed by Maciej.

        - fix http://bugzilla.opendarwin.org/show_bug.cgi?id=10171
          REGRESSION: failing layout test: fast/events/objc-event-api.html

        * DumpRenderTree/DumpRenderTree.m:
        (main): Add pose so we can implement +[NSEvent mouseLocation]. Put the window at a predictable
        location in flipped coordinates, since those are the coordinates that we use.
        (+[DumpRenderTreeEvent mouseLocation]): Implement this, since it's used for mouse event handling
        inside WebHTMLView.

        * DumpRenderTree/EventSendingController.m:
        (+[EventSendingController initialize]): Removed unused webkitDomEventProperties array.
        (-[EventSendingController init]): Removed, since the whole thing was a no-op.
        (-[EventSendingController mouseMoveToX:Y:]): Convert the x,y pair to window coordinates. The old code
        probably worked OK, but this is needed to be correct.
        (-[EventSendingController handleEvent:]): Put clientX/Y before screenX/Y and removed the flipping
        code from screenY. We didn't really need to flip screenY -- what was actually happening was that the
        position that DumpRenderTree chose was in non-flipped coordinates, and with that fixed we can just
        dump the screenY as-is.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@15731 268f45cc-cd09-0410-ab3c-d52691b4dbfc

LayoutTests/ChangeLog
LayoutTests/fast/events/objc-event-api-expected.txt
WebKitTools/ChangeLog
WebKitTools/DumpRenderTree/DumpRenderTree.m
WebKitTools/DumpRenderTree/EventSendingController.m

index d0510a641b792b0851436e3883cf8b7a50dbe7b4..abff314e5949f1db2d2fbf24549c4a2172314e8f 100644 (file)
@@ -1,3 +1,13 @@
+2006-07-31  Darin Adler  <darin@apple.com>
+
+        Reviewed by Maciej.
+
+        - fix http://bugzilla.opendarwin.org/show_bug.cgi?id=10171
+          REGRESSION: failing layout test: fast/events/objc-event-api.html
+
+        * fast/events/objc-event-api-expected.txt: Updated test results for changes in the
+        DumpRenderTree tool.
+
 2006-07-31  Mark Rowe  <opendarwin.org@bdash.net.nz>
 
         Reviewed by Maciej.
index f86edc9d330d9c32897da2319a434f49f172728d..8e1dff135805bef398be68d02e5c379f4aa2b89a 100644 (file)
@@ -6,10 +6,10 @@ event type:      mouseover
   detail:        0
   view:          OK (document: OK)
   button:        0
-  screenX:       -9900
-  screenY:       -9500 (flipped)
   clientX:       100
   clientY:       100
+  screenX:       -9900
+  screenY:       -9900
   modifier keys: c:0 s:0 a:0 m:0
 event type:      mousedown
   target:        <div>
@@ -19,10 +19,10 @@ event type:      mousedown
   detail:        1
   view:          OK (document: OK)
   button:        0
-  screenX:       -9900
-  screenY:       -9500 (flipped)
   clientX:       100
   clientY:       100
+  screenX:       -9900
+  screenY:       -9900
   modifier keys: c:0 s:0 a:0 m:0
 event type:      selectstart
   target:        <div>
@@ -39,10 +39,10 @@ event type:      mouseup
   detail:        1
   view:          OK (document: OK)
   button:        0
-  screenX:       -9900
-  screenY:       -9500 (flipped)
   clientX:       100
   clientY:       100
+  screenX:       -9900
+  screenY:       -9900
   modifier keys: c:0 s:0 a:0 m:0
 event type:      click
   target:        <div>
@@ -52,10 +52,23 @@ event type:      click
   detail:        1
   view:          OK (document: OK)
   button:        0
+  clientX:       100
+  clientY:       100
   screenX:       -9900
-  screenY:       -9500 (flipped)
+  screenY:       -9900
+  modifier keys: c:0 s:0 a:0 m:0
+event type:      mousemove
+  target:        <div>
+  eventPhase:    3
+  bubbles:       1
+  cancelable:    0
+  detail:        0
+  view:          OK (document: OK)
+  button:        0
   clientX:       100
   clientY:       100
+  screenX:       -9900
+  screenY:       -9900
   modifier keys: c:0 s:0 a:0 m:0
 event type:      keydown
   target:        <body>
@@ -161,10 +174,10 @@ event type:      mousemove
   detail:        0
   view:          OK (document: OK)
   button:        0
-  screenX:       -9600
-  screenY:       -9550 (flipped)
   clientX:       400
   clientY:       150
+  screenX:       -9600
+  screenY:       -9850
   modifier keys: c:0 s:0 a:0 m:0
 event type:      mousedown
   target:        <div>
@@ -174,10 +187,10 @@ event type:      mousedown
   detail:        2
   view:          OK (document: OK)
   button:        0
-  screenX:       -9600
-  screenY:       -9550 (flipped)
   clientX:       400
   clientY:       150
+  screenX:       -9600
+  screenY:       -9850
   modifier keys: c:0 s:0 a:0 m:0
 event type:      selectstart
   target:        <div>
@@ -194,10 +207,10 @@ event type:      mousedown
   detail:        3
   view:          OK (document: OK)
   button:        0
-  screenX:       -9600
-  screenY:       -9550 (flipped)
   clientX:       400
   clientY:       150
+  screenX:       -9600
+  screenY:       -9850
   modifier keys: c:0 s:0 a:0 m:0
 event type:      selectstart
   target:        <div>
@@ -214,10 +227,10 @@ event type:      mouseout
   detail:        0
   view:          OK (document: OK)
   button:        0
-  screenX:       -9999
-  screenY:       -9401 (flipped)
   clientX:       1
   clientY:       1
+  screenX:       -9999
+  screenY:       -9999
   modifier keys: c:0 s:0 a:0 m:0
   relatedTarget: DOMHTMLHtmlElement (nodeName: HTML)
 event type:      mouseover
@@ -228,10 +241,10 @@ event type:      mouseover
   detail:        0
   view:          OK (document: OK)
   button:        0
-  screenX:       -9999
-  screenY:       -9401 (flipped)
   clientX:       1
   clientY:       1
+  screenX:       -9999
+  screenY:       -9999
   modifier keys: c:0 s:0 a:0 m:0
   relatedTarget: DOMHTMLDivElement (nodeName: DIV)
 event type:      mousemove
@@ -242,10 +255,10 @@ event type:      mousemove
   detail:        0
   view:          OK (document: OK)
   button:        0
-  screenX:       -9999
-  screenY:       -9401 (flipped)
   clientX:       1
   clientY:       1
+  screenX:       -9999
+  screenY:       -9999
   modifier keys: c:0 s:0 a:0 m:0
 event type:      selectstart
   target:        <html>
@@ -261,23 +274,23 @@ event type:      mouseup
   detail:        0
   view:          OK (document: OK)
   button:        0
-  screenX:       -9999
-  screenY:       -9401 (flipped)
   clientX:       1
   clientY:       1
+  screenX:       -9999
+  screenY:       -9999
   modifier keys: c:0 s:0 a:0 m:0
-event type:      mouseout
+event type:      mousemove
   target:        <html>
   eventPhase:    3
   bubbles:       1
-  cancelable:    1
+  cancelable:    0
   detail:        0
   view:          OK (document: OK)
   button:        0
-  screenX:       0
-  screenY:       0 (flipped)
-  clientX:       -1
-  clientY:       601
+  clientX:       1
+  clientY:       1
+  screenX:       -9999
+  screenY:       -9999
   modifier keys: c:0 s:0 a:0 m:0
 Test
 This tests that DOMEvents are correctly handed to the ObjC API. See bug 9181.
index 55e19895e0d943cce91e4daa9436513ffb5e43a9..3eac17ba8f7d059d937556248ad099c3edb05459 100644 (file)
@@ -1,3 +1,26 @@
+2006-07-31  Darin Adler  <darin@apple.com>
+
+        Reviewed by Maciej.
+
+        - fix http://bugzilla.opendarwin.org/show_bug.cgi?id=10171
+          REGRESSION: failing layout test: fast/events/objc-event-api.html
+
+        * DumpRenderTree/DumpRenderTree.m:
+        (main): Add pose so we can implement +[NSEvent mouseLocation]. Put the window at a predictable
+        location in flipped coordinates, since those are the coordinates that we use.
+        (+[DumpRenderTreeEvent mouseLocation]): Implement this, since it's used for mouse event handling
+        inside WebHTMLView.
+
+        * DumpRenderTree/EventSendingController.m:
+        (+[EventSendingController initialize]): Removed unused webkitDomEventProperties array.
+        (-[EventSendingController init]): Removed, since the whole thing was a no-op.
+        (-[EventSendingController mouseMoveToX:Y:]): Convert the x,y pair to window coordinates. The old code
+        probably worked OK, but this is needed to be correct.
+        (-[EventSendingController handleEvent:]): Put clientX/Y before screenX/Y and removed the flipping
+        code from screenY. We didn't really need to flip screenY -- what was actually happening was that the
+        position that DumpRenderTree chose was in non-flipped coordinates, and with that fixed we can just
+        dump the screenY as-is.
+
 2006-07-31  Mark Rowe  <opendarwin.org@bdash.net.nz>
 
         Reviewed by Darin.
index c2eb6ebf75f6c2646a25707e81c476b47b6b725b..d604f6a688a8dd703fd12612368781f3c14d5c4b 100644 (file)
@@ -67,6 +67,9 @@
 @interface DumpRenderTreePasteboard : NSPasteboard
 @end
 
+@interface DumpRenderTreeEvent : NSEvent
+@end
+
 @interface WaitUntilDoneDelegate : NSObject
 @end
 
@@ -198,7 +201,8 @@ int main(int argc, const char *argv[])
 
     class_poseAs(objc_getClass("DumpRenderTreePasteboard"), objc_getClass("NSPasteboard"));
     class_poseAs(objc_getClass("DumpRenderTreeWindow"), objc_getClass("NSWindow"));
-    
+    class_poseAs(objc_getClass("DumpRenderTreeEvent"), objc_getClass("NSEvent"));
+
     struct option options[] = {
         {"dump-all-pixels", no_argument, &dumpAllPixels, YES},
         {"horizontal-sweep", no_argument, &repaintSweepHorizontallyDefault, YES},
@@ -279,7 +283,8 @@ int main(int argc, const char *argv[])
     [[webView backForwardList] setPageCacheSize:0];
 
     // To make things like certain NSViews, dragging, and plug-ins work, put the WebView a window, but put it off-screen so you don't see it.
-    NSRect windowRect = NSOffsetRect(rect, -10000, -10000);
+    // Put it at -10000, -10000 in "flipped coordinates", since WebCore and the DOM use flipped coordinates.
+    NSRect windowRect = NSOffsetRect(rect, -10000, [[[NSScreen screens] objectAtIndex:0] frame].size.height - rect.size.height + 10000);
     NSWindow *window = [[NSWindow alloc] initWithContentRect:windowRect styleMask:NSBorderlessWindowMask backing:NSBackingStoreBuffered defer:YES];
     [[window contentView] addSubview:webView];
     [window orderBack:nil];
@@ -815,3 +820,12 @@ static NSString *md5HashStringForBitmap(CGImageRef bitmap)
 }
 
 @end
+
+@implementation DumpRenderTreeEvent
+
++ (NSPoint)mouseLocation
+{
+    return [[[frame webView] window] convertBaseToScreen:lastMousePosition];
+}
+
+@end
index 6ee9d713fe6f332bcb1b6bf0804c41734a0f8f18..9cec6d6defcf4afd05920ee89534e41d1aeeed6f 100644 (file)
 
 NSPoint lastMousePosition;
 NSArray *webkitDomEventNames;
-NSArray *webkitDomEventProperties;
 
 @implementation EventSendingController
 
-+ (void)initialize {
++ (void)initialize
+{
     webkitDomEventNames = [[NSArray alloc] initWithObjects:
         @"abort",
         @"beforecopy",
@@ -89,11 +89,6 @@ NSArray *webkitDomEventProperties;
         @"unload",
         @"zoom",
         nil];
-    
-    webkitDomEventProperties = [[NSArray alloc] initWithObjects:
-        @"clientX",
-        @"clientY",
-        nil];
 }
 
 + (BOOL)isSelectorExcludedFromWebScript:(SEL)aSelector
@@ -122,15 +117,6 @@ NSArray *webkitDomEventProperties;
     return nil;
 }
 
-- (id)init
-{
-    lastMousePosition = NSMakePoint(0, 0);
-    down = NO;
-    clickCount = 0;
-    lastClick = 0;
-    return self;
-}
-
 - (double)currentEventTime
 {
     return GetCurrentEventTime() + timeOffset;
@@ -199,12 +185,13 @@ NSArray *webkitDomEventProperties;
 
 - (void)mouseMoveToX:(int)x Y:(int)y
 {
-    lastMousePosition = NSMakePoint(x, [[frame webView] frame].size.height - y);
+    NSView *view = [frame webView];
+    lastMousePosition = [view convertPoint:NSMakePoint(x, [view frame].size.height - y) toView:nil];
     NSEvent *event = [NSEvent mouseEventWithType:(down ? NSLeftMouseDragged : NSMouseMoved) 
                                         location:lastMousePosition 
                                    modifierFlags:nil 
                                        timestamp:[self currentEventTime]
-                                    windowNumber:[[[frame webView] window] windowNumber] 
+                                    windowNumber:[[view window] windowNumber] 
                                          context:[NSGraphicsContext currentContext] 
                                      eventNumber:++eventNumber 
                                       clickCount:(down ? clickCount : 0) 
@@ -344,10 +331,10 @@ NSArray *webkitDomEventProperties;
     
     if ([event isKindOfClass:[DOMMouseEvent class]]) {
         printf("  button:        %d\n", [(DOMMouseEvent*)event button]);
-        printf("  screenX:       %d\n", [(DOMMouseEvent*)event screenX]);
-        printf("  screenY:       %d (flipped)\n", (int) [[[NSScreen screens] objectAtIndex:0] frame].size.height - [(DOMMouseEvent*)event screenY]);
         printf("  clientX:       %d\n", [(DOMMouseEvent*)event clientX]);
         printf("  clientY:       %d\n", [(DOMMouseEvent*)event clientY]);
+        printf("  screenX:       %d\n", [(DOMMouseEvent*)event screenX]);
+        printf("  screenY:       %d\n", [(DOMMouseEvent*)event screenY]);
         printf("  modifier keys: c:%d s:%d a:%d m:%d\n", 
                [(DOMMouseEvent*)event ctrlKey] ? 1 : 0, 
                [(DOMMouseEvent*)event shiftKey] ? 1 : 0, 
@@ -376,10 +363,10 @@ NSArray *webkitDomEventProperties;
     }
     
     if ([event isKindOfClass:[DOMWheelEvent class]]) {
-        printf("  screenX:       %d\n", [(DOMWheelEvent*)event screenX]);
-        printf("  screenY:       %d (flipped)\n", (int) [[[NSScreen screens] objectAtIndex:0] frame].size.height - [(DOMWheelEvent*)event screenY]);
         printf("  clientX:       %d\n", [(DOMWheelEvent*)event clientX]);
         printf("  clientY:       %d\n", [(DOMWheelEvent*)event clientY]);
+        printf("  screenX:       %d\n", [(DOMWheelEvent*)event screenX]);
+        printf("  screenY:       %d\n", [(DOMWheelEvent*)event screenY]);
         printf("  modifier keys: c:%d s:%d a:%d m:%d\n", 
                [(DOMWheelEvent*)event ctrlKey] ? 1 : 0, 
                [(DOMWheelEvent*)event shiftKey] ? 1 : 0,