Roll out r33018 as it broke the builds.
[WebKit-https.git] / WebKit / mac / Plugins / WebNetscapePluginEventHandlerCocoa.mm
1 /*
2  * Copyright (C) 2008 Apple Inc. All Rights Reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  * 1. Redistributions of source code must retain the above copyright
8  *    notice, this list of conditions and the following disclaimer.
9  * 2. Redistributions in binary form must reproduce the above copyright
10  *    notice, this list of conditions and the following disclaimer in the
11  *    documentation and/or other materials provided with the distribution.
12  *
13  * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
14  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
17  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
20  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
24  */
25
26 #if ENABLE(NETSCAPE_PLUGIN_API)
27
28 #import "WebNetscapePluginEventHandlerCocoa.h"
29
30 #import "WebBaseNetscapePluginViewInternal.h"
31
32 WebNetscapePluginEventHandlerCocoa::WebNetscapePluginEventHandlerCocoa(WebBaseNetscapePluginView* pluginView)
33     : WebNetscapePluginEventHandler(pluginView)
34 {
35 }
36
37 void WebNetscapePluginEventHandlerCocoa::drawRect(const NSRect& rect)
38 {
39     NPCocoaEvent event;
40     
41     event.type = NPCocoaEventDrawRect;
42     event.event.draw.x = rect.origin.x;
43     event.event.draw.y = rect.origin.y;
44     event.event.draw.width = rect.size.width;
45     event.event.draw.height = rect.size.height;
46     
47     sendEvent(&event);
48 }
49
50 void WebNetscapePluginEventHandlerCocoa::mouseDown(NSEvent *event)
51 {
52     sendMouseEvent(event, NPCocoaEventMouseDown);
53 }
54
55 void WebNetscapePluginEventHandlerCocoa::mouseDragged(NSEvent *event)
56 {
57     sendMouseEvent(event, NPCocoaEventMouseDragged);
58 }
59
60 void WebNetscapePluginEventHandlerCocoa::mouseEntered(NSEvent *event)
61 {
62     sendMouseEvent(event, NPCocoaEventMouseEntered);
63 }
64
65 void WebNetscapePluginEventHandlerCocoa::mouseExited(NSEvent *event)
66 {
67     sendMouseEvent(event, NPCocoaEventMouseExited);
68 }
69
70 void WebNetscapePluginEventHandlerCocoa::mouseMoved(NSEvent *event)
71 {
72     sendMouseEvent(event, NPCocoaEventMouseMoved);
73 }
74
75 void WebNetscapePluginEventHandlerCocoa::mouseUp(NSEvent *event)
76 {
77     sendMouseEvent(event, NPCocoaEventMouseUp);
78 }
79
80 bool WebNetscapePluginEventHandlerCocoa::scrollWheel(NSEvent* event)
81 {
82     return sendMouseEvent(event, NPCocoaEventScrollWheel);
83 }
84
85 bool WebNetscapePluginEventHandlerCocoa::sendMouseEvent(NSEvent *nsEvent, NPCocoaEventType type)
86 {
87     NPCocoaEvent event;
88     
89     NSPoint point = [m_pluginView convertPoint:[nsEvent locationInWindow] fromView:nil];
90     
91     int clickCount;
92     if (type == NPCocoaEventMouseEntered || type == NPCocoaEventMouseExited || type == NPCocoaEventScrollWheel)
93         clickCount = 0;
94     else
95         clickCount = [nsEvent clickCount];
96     
97     event.type = type;
98     event.event.mouse.modifierFlags = [nsEvent modifierFlags];
99     event.event.mouse.buttonNumber = [nsEvent buttonNumber];
100     event.event.mouse.clickCount = clickCount;
101     event.event.mouse.pluginX = point.x;
102     event.event.mouse.pluginY = point.y;
103     event.event.mouse.deltaX = [nsEvent deltaX];
104     event.event.mouse.deltaY = [nsEvent deltaY];
105     event.event.mouse.deltaZ = [nsEvent deltaZ];
106     
107     return sendEvent(&event);
108 }
109
110 void WebNetscapePluginEventHandlerCocoa::keyDown(NSEvent *event)
111 {
112     sendKeyEvent(event, NPCocoaEventKeyDown);
113 }
114
115 void WebNetscapePluginEventHandlerCocoa::keyUp(NSEvent *event)
116 {
117     sendKeyEvent(event, NPCocoaEventKeyUp);
118 }
119
120 void WebNetscapePluginEventHandlerCocoa::flagsChanged(NSEvent *nsEvent)
121 {
122     NPCocoaEvent event;
123         
124     event.type = NPCocoaEventFlagsChanged;
125     event.event.key.modifierFlags = [nsEvent modifierFlags];
126     event.event.key.keyCode = [nsEvent keyCode];
127     event.event.key.isARepeat = false;
128     event.event.key.characters = 0;
129     event.event.key.charactersIgnoringModifiers = 0;
130     
131     sendEvent(&event);
132 }
133
134 void WebNetscapePluginEventHandlerCocoa::sendKeyEvent(NSEvent* nsEvent, NPCocoaEventType type)
135 {
136     NPCocoaEvent event;
137         
138     event.type = type;
139     event.event.key.modifierFlags = [nsEvent modifierFlags];
140     event.event.key.keyCode = [nsEvent keyCode];
141     event.event.key.isARepeat = [nsEvent isARepeat];
142     event.event.key.characters = (NPNSString *)[nsEvent characters];
143     event.event.key.charactersIgnoringModifiers = (NPNSString *)[nsEvent charactersIgnoringModifiers];
144      
145     sendEvent(&event);
146 }
147
148 void WebNetscapePluginEventHandlerCocoa::windowFocusChanged(bool hasFocus)
149 {
150     NPCocoaEvent event;
151     
152     event.type = NPCocoaEventWindowFocusChanged;
153     event.event.focus.hasFocus = hasFocus;
154     
155     sendEvent(&event);
156 }
157
158 void WebNetscapePluginEventHandlerCocoa::focusChanged(bool hasFocus)
159 {
160     NPCocoaEvent event;
161     
162     event.type = NPCocoaEventFocusChanged;
163     event.event.focus.hasFocus = hasFocus;
164     
165     sendEvent(&event);
166 }
167
168 void* WebNetscapePluginEventHandlerCocoa::platformWindow(NSWindow* window)
169 {
170     return window;
171 }
172
173 bool WebNetscapePluginEventHandlerCocoa::sendEvent(NPCocoaEvent* event)
174 {
175     switch (event->type) {
176         case NPCocoaEventMouseDown:
177         case NPCocoaEventMouseUp:
178         case NPCocoaEventMouseDragged:
179         case NPCocoaEventKeyDown:
180         case NPCocoaEventKeyUp:
181         case NPCocoaEventFlagsChanged:
182         case NPCocoaEventScrollWheel:
183             m_currentEventIsUserGesture = true;
184             break;
185         default:
186             m_currentEventIsUserGesture = false;
187     }
188             
189     bool result = [m_pluginView sendEvent:event isDrawRect:event->type == NPCocoaEventDrawRect];
190     
191     m_currentEventIsUserGesture = false;
192     return result;
193 }
194
195 #endif // ENABLE(NETSCAPE_PLUGIN_API)