47
47
48
48
namespace blink {
49
49
50
- void PageWidgetDelegate::animate (Page* page, double monotonicFrameBeginTime, LocalFrame* 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, LocalFrame* rootFrame)
62
+ {
63
+ RefPtr<FrameView> view = rootFrameView (page, rootFrame);
53
64
if (!view)
54
65
return ;
55
66
page->autoscrollController ().animate (monotonicFrameBeginTime);
56
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
72
if (!page)
62
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
86
if (rect.isEmpty ())
70
87
return ;
@@ -74,7 +91,7 @@ void PageWidgetDelegate::paint(Page* page, PageOverlayList* overlays, WebCanvas*
74
91
gc.setDeviceScaleFactor (page->deviceScaleFactor ());
75
92
IntRect dirtyRect (rect);
76
93
gc.save (); // Needed to save the canvas, not the GraphicsContext.
77
- FrameView* view = root-> view ( );
94
+ FrameView* view = rootFrameView (page, rootFrame );
78
95
if (view) {
79
96
gc.clip (dirtyRect);
80
97
view->paint (&gc, dirtyRect);
@@ -86,40 +103,41 @@ void PageWidgetDelegate::paint(Page* page, PageOverlayList* overlays, WebCanvas*
86
103
gc.restore ();
87
104
}
88
105
89
- bool PageWidgetDelegate::handleInputEvent (Page* page, PageWidgetEventHandler& handler, const WebInputEvent& event, LocalFrame* root )
106
+ bool PageWidgetDelegate::handleInputEvent (Page* page, PageWidgetEventHandler& handler, const WebInputEvent& event, LocalFrame* rootFrame )
90
107
{
108
+ LocalFrame* frame = rootFrame;
109
+ if (!frame)
110
+ frame = page && page->mainFrame ()->isLocalFrame () ? toLocalFrame (page->mainFrame ()) : 0 ;
91
111
switch (event.type ) {
92
112
93
113
// FIXME: WebKit seems to always return false on mouse events processing
94
114
// methods. For now we'll assume it has processed them (as we are only
95
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
116
case WebInputEvent::MouseMove:
99
- if (!root || !root ->view ())
117
+ if (!frame || !frame ->view ())
100
118
return true ;
101
- handler.handleMouseMove (*root , static_cast <const WebMouseEvent&>(event));
119
+ handler.handleMouseMove (*frame , static_cast <const WebMouseEvent&>(event));
102
120
return true ;
103
121
case WebInputEvent::MouseLeave:
104
- if (!root || !root ->view ())
122
+ if (!frame || !frame ->view ())
105
123
return true ;
106
- handler.handleMouseLeave (*root , static_cast <const WebMouseEvent&>(event));
124
+ handler.handleMouseLeave (*frame , static_cast <const WebMouseEvent&>(event));
107
125
return true ;
108
126
case WebInputEvent::MouseDown:
109
- if (!root || !root ->view ())
127
+ if (!frame || !frame ->view ())
110
128
return true ;
111
- handler.handleMouseDown (*root , static_cast <const WebMouseEvent&>(event));
129
+ handler.handleMouseDown (*frame , static_cast <const WebMouseEvent&>(event));
112
130
return true ;
113
131
case WebInputEvent::MouseUp:
114
- if (!root || !root ->view ())
132
+ if (!frame || !frame ->view ())
115
133
return true ;
116
- handler.handleMouseUp (*root , static_cast <const WebMouseEvent&>(event));
134
+ handler.handleMouseUp (*frame , static_cast <const WebMouseEvent&>(event));
117
135
return true ;
118
136
119
137
case WebInputEvent::MouseWheel:
120
- if (!root || !root ->view ())
138
+ if (!frame || !frame ->view ())
121
139
return false ;
122
- return handler.handleMouseWheel (*root , static_cast <const WebMouseWheelEvent&>(event));
140
+ return handler.handleMouseWheel (*frame , static_cast <const WebMouseWheelEvent&>(event));
123
141
124
142
case WebInputEvent::RawKeyDown:
125
143
case WebInputEvent::KeyDown:
@@ -149,9 +167,9 @@ bool PageWidgetDelegate::handleInputEvent(Page* page, PageWidgetEventHandler& ha
149
167
case WebInputEvent::TouchMove:
150
168
case WebInputEvent::TouchEnd:
151
169
case WebInputEvent::TouchCancel:
152
- if (!root || !root ->view ())
170
+ if (!frame || !frame ->view ())
153
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
174
case WebInputEvent::GesturePinchBegin:
157
175
case WebInputEvent::GesturePinchEnd:
0 commit comments