| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2012 Google Inc. All rights reserved. | 2 * Copyright (C) 2012 Google Inc. All rights reserved. |
| 3 * | 3 * |
| 4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
| 5 * modification, are permitted provided that the following conditions are | 5 * modification, are permitted provided that the following conditions are |
| 6 * met: | 6 * met: |
| 7 * | 7 * |
| 8 * * Redistributions of source code must retain the above copyright | 8 * * Redistributions of source code must retain the above copyright |
| 9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
| 10 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
| (...skipping 29 matching lines...) Expand all Loading... |
| 40 #include "core/rendering/compositing/RenderLayerCompositor.h" | 40 #include "core/rendering/compositing/RenderLayerCompositor.h" |
| 41 #include "platform/Logging.h" | 41 #include "platform/Logging.h" |
| 42 #include "platform/graphics/GraphicsContext.h" | 42 #include "platform/graphics/GraphicsContext.h" |
| 43 #include "public/web/WebInputEvent.h" | 43 #include "public/web/WebInputEvent.h" |
| 44 #include "web/PageOverlayList.h" | 44 #include "web/PageOverlayList.h" |
| 45 #include "web/WebInputEventConversion.h" | 45 #include "web/WebInputEventConversion.h" |
| 46 #include "wtf/CurrentTime.h" | 46 #include "wtf/CurrentTime.h" |
| 47 | 47 |
| 48 namespace blink { | 48 namespace blink { |
| 49 | 49 |
| 50 void PageWidgetDelegate::animate(Page* page, double monotonicFrameBeginTime, Loc
alFrame* root) | 50 static inline FrameView* rootFrameView(Page* page, LocalFrame* rootFrame) |
| 51 { | 51 { |
| 52 RefPtr<FrameView> view = root->view(); | 52 if (rootFrame) |
| 53 return rootFrame->view(); |
| 54 if (!page) |
| 55 return 0; |
| 56 if (!page->mainFrame()->isLocalFrame()) |
| 57 return 0; |
| 58 return toLocalFrame(page->mainFrame())->view(); |
| 59 } |
| 60 |
| 61 void PageWidgetDelegate::animate(Page* page, double monotonicFrameBeginTime, Loc
alFrame* rootFrame) |
| 62 { |
| 63 RefPtr<FrameView> view = rootFrameView(page, rootFrame); |
| 53 if (!view) | 64 if (!view) |
| 54 return; | 65 return; |
| 55 page->autoscrollController().animate(monotonicFrameBeginTime); | 66 page->autoscrollController().animate(monotonicFrameBeginTime); |
| 56 page->animator().serviceScriptedAnimations(monotonicFrameBeginTime); | 67 page->animator().serviceScriptedAnimations(monotonicFrameBeginTime); |
| 57 } | 68 } |
| 58 | 69 |
| 59 void PageWidgetDelegate::layout(Page* page, LocalFrame* root) | 70 void PageWidgetDelegate::layout(Page* page, LocalFrame* rootFrame) |
| 60 { | 71 { |
| 61 if (!page) | 72 if (!page) |
| 62 return; | 73 return; |
| 63 | 74 |
| 64 page->animator().updateLayoutAndStyleForPainting(root); | 75 if (!rootFrame) { |
| 76 if (!page->mainFrame() || !page->mainFrame()->isLocalFrame()) |
| 77 return; |
| 78 rootFrame = toLocalFrame(page->mainFrame()); |
| 79 } |
| 80 |
| 81 page->animator().updateLayoutAndStyleForPainting(rootFrame); |
| 65 } | 82 } |
| 66 | 83 |
| 67 void PageWidgetDelegate::paint(Page* page, PageOverlayList* overlays, WebCanvas*
canvas, const WebRect& rect, CanvasBackground background, LocalFrame* root) | 84 void PageWidgetDelegate::paint(Page* page, PageOverlayList* overlays, WebCanvas*
canvas, const WebRect& rect, CanvasBackground background, LocalFrame* rootFrame
) |
| 68 { | 85 { |
| 69 if (rect.isEmpty()) | 86 if (rect.isEmpty()) |
| 70 return; | 87 return; |
| 71 GraphicsContext gc(canvas); | 88 GraphicsContext gc(canvas); |
| 72 gc.setCertainlyOpaque(background == Opaque); | 89 gc.setCertainlyOpaque(background == Opaque); |
| 73 gc.applyDeviceScaleFactor(page->deviceScaleFactor()); | 90 gc.applyDeviceScaleFactor(page->deviceScaleFactor()); |
| 74 gc.setDeviceScaleFactor(page->deviceScaleFactor()); | 91 gc.setDeviceScaleFactor(page->deviceScaleFactor()); |
| 75 IntRect dirtyRect(rect); | 92 IntRect dirtyRect(rect); |
| 76 gc.save(); // Needed to save the canvas, not the GraphicsContext. | 93 gc.save(); // Needed to save the canvas, not the GraphicsContext. |
| 77 FrameView* view = root->view(); | 94 FrameView* view = rootFrameView(page, rootFrame); |
| 78 if (view) { | 95 if (view) { |
| 79 gc.clip(dirtyRect); | 96 gc.clip(dirtyRect); |
| 80 view->paint(&gc, dirtyRect); | 97 view->paint(&gc, dirtyRect); |
| 81 if (overlays) | 98 if (overlays) |
| 82 overlays->paintWebFrame(gc); | 99 overlays->paintWebFrame(gc); |
| 83 } else { | 100 } else { |
| 84 gc.fillRect(dirtyRect, Color::white); | 101 gc.fillRect(dirtyRect, Color::white); |
| 85 } | 102 } |
| 86 gc.restore(); | 103 gc.restore(); |
| 87 } | 104 } |
| 88 | 105 |
| 89 bool PageWidgetDelegate::handleInputEvent(Page* page, PageWidgetEventHandler& ha
ndler, const WebInputEvent& event, LocalFrame* root) | 106 bool PageWidgetDelegate::handleInputEvent(Page* page, PageWidgetEventHandler& ha
ndler, const WebInputEvent& event, LocalFrame* rootFrame) |
| 90 { | 107 { |
| 108 LocalFrame* frame = rootFrame; |
| 109 if (!frame) |
| 110 frame = page && page->mainFrame()->isLocalFrame() ? toLocalFrame(page->m
ainFrame()) : 0; |
| 91 switch (event.type) { | 111 switch (event.type) { |
| 92 | 112 |
| 93 // FIXME: WebKit seems to always return false on mouse events processing | 113 // FIXME: WebKit seems to always return false on mouse events processing |
| 94 // methods. For now we'll assume it has processed them (as we are only | 114 // methods. For now we'll assume it has processed them (as we are only |
| 95 // interested in whether keyboard events are processed). | 115 // interested in whether keyboard events are processed). |
| 96 // FIXME: Why do we return true when there is no root or the root is | |
| 97 // detached? | |
| 98 case WebInputEvent::MouseMove: | 116 case WebInputEvent::MouseMove: |
| 99 if (!root || !root->view()) | 117 if (!frame || !frame->view()) |
| 100 return true; | 118 return true; |
| 101 handler.handleMouseMove(*root, static_cast<const WebMouseEvent&>(event))
; | 119 handler.handleMouseMove(*frame, static_cast<const WebMouseEvent&>(event)
); |
| 102 return true; | 120 return true; |
| 103 case WebInputEvent::MouseLeave: | 121 case WebInputEvent::MouseLeave: |
| 104 if (!root || !root->view()) | 122 if (!frame || !frame->view()) |
| 105 return true; | 123 return true; |
| 106 handler.handleMouseLeave(*root, static_cast<const WebMouseEvent&>(event)
); | 124 handler.handleMouseLeave(*frame, static_cast<const WebMouseEvent&>(event
)); |
| 107 return true; | 125 return true; |
| 108 case WebInputEvent::MouseDown: | 126 case WebInputEvent::MouseDown: |
| 109 if (!root || !root->view()) | 127 if (!frame || !frame->view()) |
| 110 return true; | 128 return true; |
| 111 handler.handleMouseDown(*root, static_cast<const WebMouseEvent&>(event))
; | 129 handler.handleMouseDown(*frame, static_cast<const WebMouseEvent&>(event)
); |
| 112 return true; | 130 return true; |
| 113 case WebInputEvent::MouseUp: | 131 case WebInputEvent::MouseUp: |
| 114 if (!root || !root->view()) | 132 if (!frame || !frame->view()) |
| 115 return true; | 133 return true; |
| 116 handler.handleMouseUp(*root, static_cast<const WebMouseEvent&>(event)); | 134 handler.handleMouseUp(*frame, static_cast<const WebMouseEvent&>(event)); |
| 117 return true; | 135 return true; |
| 118 | 136 |
| 119 case WebInputEvent::MouseWheel: | 137 case WebInputEvent::MouseWheel: |
| 120 if (!root || !root->view()) | 138 if (!frame || !frame->view()) |
| 121 return false; | 139 return false; |
| 122 return handler.handleMouseWheel(*root, static_cast<const WebMouseWheelEv
ent&>(event)); | 140 return handler.handleMouseWheel(*frame, static_cast<const WebMouseWheelE
vent&>(event)); |
| 123 | 141 |
| 124 case WebInputEvent::RawKeyDown: | 142 case WebInputEvent::RawKeyDown: |
| 125 case WebInputEvent::KeyDown: | 143 case WebInputEvent::KeyDown: |
| 126 case WebInputEvent::KeyUp: | 144 case WebInputEvent::KeyUp: |
| 127 return handler.handleKeyEvent(static_cast<const WebKeyboardEvent&>(event
)); | 145 return handler.handleKeyEvent(static_cast<const WebKeyboardEvent&>(event
)); |
| 128 | 146 |
| 129 case WebInputEvent::Char: | 147 case WebInputEvent::Char: |
| 130 return handler.handleCharEvent(static_cast<const WebKeyboardEvent&>(even
t)); | 148 return handler.handleCharEvent(static_cast<const WebKeyboardEvent&>(even
t)); |
| 131 case WebInputEvent::GestureScrollBegin: | 149 case WebInputEvent::GestureScrollBegin: |
| 132 case WebInputEvent::GestureScrollEnd: | 150 case WebInputEvent::GestureScrollEnd: |
| 133 case WebInputEvent::GestureScrollUpdate: | 151 case WebInputEvent::GestureScrollUpdate: |
| 134 case WebInputEvent::GestureScrollUpdateWithoutPropagation: | 152 case WebInputEvent::GestureScrollUpdateWithoutPropagation: |
| 135 case WebInputEvent::GestureFlingStart: | 153 case WebInputEvent::GestureFlingStart: |
| 136 case WebInputEvent::GestureFlingCancel: | 154 case WebInputEvent::GestureFlingCancel: |
| 137 case WebInputEvent::GestureTap: | 155 case WebInputEvent::GestureTap: |
| 138 case WebInputEvent::GestureTapUnconfirmed: | 156 case WebInputEvent::GestureTapUnconfirmed: |
| 139 case WebInputEvent::GestureTapDown: | 157 case WebInputEvent::GestureTapDown: |
| 140 case WebInputEvent::GestureShowPress: | 158 case WebInputEvent::GestureShowPress: |
| 141 case WebInputEvent::GestureTapCancel: | 159 case WebInputEvent::GestureTapCancel: |
| 142 case WebInputEvent::GestureDoubleTap: | 160 case WebInputEvent::GestureDoubleTap: |
| 143 case WebInputEvent::GestureTwoFingerTap: | 161 case WebInputEvent::GestureTwoFingerTap: |
| 144 case WebInputEvent::GestureLongPress: | 162 case WebInputEvent::GestureLongPress: |
| 145 case WebInputEvent::GestureLongTap: | 163 case WebInputEvent::GestureLongTap: |
| 146 return handler.handleGestureEvent(static_cast<const WebGestureEvent&>(ev
ent)); | 164 return handler.handleGestureEvent(static_cast<const WebGestureEvent&>(ev
ent)); |
| 147 | 165 |
| 148 case WebInputEvent::TouchStart: | 166 case WebInputEvent::TouchStart: |
| 149 case WebInputEvent::TouchMove: | 167 case WebInputEvent::TouchMove: |
| 150 case WebInputEvent::TouchEnd: | 168 case WebInputEvent::TouchEnd: |
| 151 case WebInputEvent::TouchCancel: | 169 case WebInputEvent::TouchCancel: |
| 152 if (!root || !root->view()) | 170 if (!frame || !frame->view()) |
| 153 return false; | 171 return false; |
| 154 return handler.handleTouchEvent(*root, static_cast<const WebTouchEvent&>
(event)); | 172 return handler.handleTouchEvent(*frame, static_cast<const WebTouchEvent&
>(event)); |
| 155 | 173 |
| 156 case WebInputEvent::GesturePinchBegin: | 174 case WebInputEvent::GesturePinchBegin: |
| 157 case WebInputEvent::GesturePinchEnd: | 175 case WebInputEvent::GesturePinchEnd: |
| 158 case WebInputEvent::GesturePinchUpdate: | 176 case WebInputEvent::GesturePinchUpdate: |
| 159 // FIXME: Once PlatformGestureEvent is updated to support pinch, this | 177 // FIXME: Once PlatformGestureEvent is updated to support pinch, this |
| 160 // should call handleGestureEvent, just like it currently does for | 178 // should call handleGestureEvent, just like it currently does for |
| 161 // gesture scroll. | 179 // gesture scroll. |
| 162 return false; | 180 return false; |
| 163 | 181 |
| 164 default: | 182 default: |
| (...skipping 28 matching lines...) Expand all Loading... |
| 193 { | 211 { |
| 194 return mainFrame.eventHandler().handleWheelEvent(PlatformWheelEventBuilder(m
ainFrame.view(), event)); | 212 return mainFrame.eventHandler().handleWheelEvent(PlatformWheelEventBuilder(m
ainFrame.view(), event)); |
| 195 } | 213 } |
| 196 | 214 |
| 197 bool PageWidgetEventHandler::handleTouchEvent(LocalFrame& mainFrame, const WebTo
uchEvent& event) | 215 bool PageWidgetEventHandler::handleTouchEvent(LocalFrame& mainFrame, const WebTo
uchEvent& event) |
| 198 { | 216 { |
| 199 return mainFrame.eventHandler().handleTouchEvent(PlatformTouchEventBuilder(m
ainFrame.view(), event)); | 217 return mainFrame.eventHandler().handleTouchEvent(PlatformTouchEventBuilder(m
ainFrame.view(), event)); |
| 200 } | 218 } |
| 201 | 219 |
| 202 } // namespace blink | 220 } // namespace blink |
| OLD | NEW |