Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(295)

Side by Side Diff: Source/WebCore/page/AutoscrollController.cpp

Issue 12040032: Merge 140104 (Closed) Base URL: http://svn.webkit.org/repository/webkit/branches/chromium/1364/
Patch Set: Created 7 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « Source/WebCore/page/AutoscrollController.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All rights reserv ed. 2 * Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All rights reserv ed.
3 * Copyright (C) 2006 Alexey Proskuryakov (ap@webkit.org) 3 * Copyright (C) 2006 Alexey Proskuryakov (ap@webkit.org)
4 * Copyright (C) 2012 Digia Plc. and/or its subsidiary(-ies) 4 * Copyright (C) 2012 Digia Plc. and/or its subsidiary(-ies)
5 * 5 *
6 * Redistribution and use in source and binary forms, with or without 6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions 7 * modification, are permitted provided that the following conditions
8 * are met: 8 * are met:
9 * 1. Redistributions of source code must retain the above copyright 9 * 1. Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer. 10 * notice, this list of conditions and the following disclaimer.
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
46 { 46 {
47 Page* page = frame->page(); 47 Page* page = frame->page();
48 return page ? page->mainFrame() : 0; 48 return page ? page->mainFrame() : 0;
49 } 49 }
50 #endif 50 #endif
51 51
52 AutoscrollController::AutoscrollController() 52 AutoscrollController::AutoscrollController()
53 : m_autoscrollTimer(this, &AutoscrollController::autoscrollTimerFired) 53 : m_autoscrollTimer(this, &AutoscrollController::autoscrollTimerFired)
54 , m_autoscrollRenderer(0) 54 , m_autoscrollRenderer(0)
55 , m_autoscrollType(NoAutoscroll) 55 , m_autoscrollType(NoAutoscroll)
56 #if ENABLE(PAN_SCROLLING)
57 , m_panScrollButtonPressed(false)
58 , m_springLoadedPanScrollInProgress(false)
59 #endif
60 { 56 {
61 } 57 }
62 58
63 RenderBox* AutoscrollController::autoscrollRenderer() const 59 RenderBox* AutoscrollController::autoscrollRenderer() const
64 { 60 {
65 return m_autoscrollRenderer; 61 return m_autoscrollRenderer;
66 } 62 }
67 63
68 bool AutoscrollController::autoscrollInProgress() const 64 bool AutoscrollController::autoscrollInProgress() const
69 { 65 {
(...skipping 12 matching lines...) Expand all
82 m_autoscrollRenderer = scrollable; 78 m_autoscrollRenderer = scrollable;
83 startAutoscrollTimer(); 79 startAutoscrollTimer();
84 } 80 }
85 81
86 void AutoscrollController::stopAutoscrollTimer(bool rendererIsBeingDestroyed) 82 void AutoscrollController::stopAutoscrollTimer(bool rendererIsBeingDestroyed)
87 { 83 {
88 RenderBox* scrollable = m_autoscrollRenderer; 84 RenderBox* scrollable = m_autoscrollRenderer;
89 m_autoscrollTimer.stop(); 85 m_autoscrollTimer.stop();
90 m_autoscrollType = NoAutoscroll; 86 m_autoscrollType = NoAutoscroll;
91 m_autoscrollRenderer = 0; 87 m_autoscrollRenderer = 0;
92 #if ENABLE(PAN_SCROLLING)
93 m_panScrollButtonPressed = false;
94 m_springLoadedPanScrollInProgress = false;
95 #endif
96 88
97 if (!scrollable) 89 if (!scrollable)
98 return; 90 return;
99 91
100 Frame* frame = scrollable->frame(); 92 Frame* frame = scrollable->frame();
101 EventHandler* eventHandler = frame->eventHandler(); 93 EventHandler* eventHandler = frame->eventHandler();
102 if (autoscrollInProgress() && eventHandler->mouseDownWasInSubframe()) { 94 if (autoscrollInProgress() && eventHandler->mouseDownWasInSubframe()) {
103 if (Frame* subframe = eventHandler->subframeForTargetNode(eventHandler-> mousePressNode())) 95 if (Frame* subframe = eventHandler->subframeForTargetNode(eventHandler-> mousePressNode()))
104 subframe->eventHandler()->stopAutoscrollTimer(rendererIsBeingDestroy ed); 96 subframe->eventHandler()->stopAutoscrollTimer(rendererIsBeingDestroy ed);
105 return; 97 return;
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
150 m_autoscrollType = AutoscrollForPan; 142 m_autoscrollType = AutoscrollForPan;
151 } 143 }
152 144
153 void AutoscrollController::didPanScrollStop() 145 void AutoscrollController::didPanScrollStop()
154 { 146 {
155 m_autoscrollType = NoAutoscroll; 147 m_autoscrollType = NoAutoscroll;
156 } 148 }
157 149
158 void AutoscrollController::handleMouseReleaseEvent(const PlatformMouseEvent& mou seEvent) 150 void AutoscrollController::handleMouseReleaseEvent(const PlatformMouseEvent& mou seEvent)
159 { 151 {
160 if (mouseEvent.button() == MiddleButton) 152 switch (m_autoscrollType) {
161 m_panScrollButtonPressed = false; 153 case AutoscrollForPan:
162 if (m_springLoadedPanScrollInProgress) 154 if (mouseEvent.button() == MiddleButton)
155 m_autoscrollType = AutoscrollForPanCanStop;
156 break;
157 case AutoscrollForPanCanStop:
163 stopAutoscrollTimer(); 158 stopAutoscrollTimer();
159 break;
160 }
164 } 161 }
165 162
166 bool AutoscrollController::panScrollInProgress() const 163 bool AutoscrollController::panScrollInProgress() const
167 { 164 {
168 return m_autoscrollType == AutoscrollForPan; 165 return m_autoscrollType == AutoscrollForPan || m_autoscrollType == Autoscrol lForPanCanStop;
169 } 166 }
170 167
171 void AutoscrollController::startPanScrolling(RenderBox* scrollable, const IntPoi nt& lastKnownMousePosition) 168 void AutoscrollController::startPanScrolling(RenderBox* scrollable, const IntPoi nt& lastKnownMousePosition)
172 { 169 {
173 // We don't want to trigger the autoscroll or the panScroll if it's already active 170 // We don't want to trigger the autoscroll or the panScroll if it's already active
174 if (m_autoscrollTimer.isActive()) 171 if (m_autoscrollTimer.isActive())
175 return; 172 return;
176 173
177 m_autoscrollType = AutoscrollForPan; 174 m_autoscrollType = AutoscrollForPan;
178 m_autoscrollRenderer = scrollable; 175 m_autoscrollRenderer = scrollable;
179 m_panScrollStartPos = lastKnownMousePosition; 176 m_panScrollStartPos = lastKnownMousePosition;
180 m_springLoadedPanScrollInProgress = false;
181 177
182 if (FrameView* view = scrollable->frame()->view()) 178 if (FrameView* view = scrollable->frame()->view())
183 view->addPanScrollIcon(lastKnownMousePosition); 179 view->addPanScrollIcon(lastKnownMousePosition);
184 scrollable->frame()->eventHandler()->didPanScrollStart(); 180 scrollable->frame()->eventHandler()->didPanScrollStart();
185 startAutoscrollTimer(); 181 startAutoscrollTimer();
186 } 182 }
187 #else 183 #else
188 bool AutoscrollController::panScrollInProgress() const 184 bool AutoscrollController::panScrollInProgress() const
189 { 185 {
190 return false; 186 return false;
(...skipping 12 matching lines...) Expand all
203 case AutoscrollForSelection: 199 case AutoscrollForSelection:
204 if (!frame->eventHandler()->mousePressed()) { 200 if (!frame->eventHandler()->mousePressed()) {
205 stopAutoscrollTimer(); 201 stopAutoscrollTimer();
206 return; 202 return;
207 } 203 }
208 m_autoscrollRenderer->autoscroll(); 204 m_autoscrollRenderer->autoscroll();
209 break; 205 break;
210 case NoAutoscroll: 206 case NoAutoscroll:
211 break; 207 break;
212 #if ENABLE(PAN_SCROLLING) 208 #if ENABLE(PAN_SCROLLING)
209 case AutoscrollForPanCanStop:
213 case AutoscrollForPan: 210 case AutoscrollForPan:
214 // we verify that the main frame hasn't received the order to stop the p anScroll 211 // we verify that the main frame hasn't received the order to stop the p anScroll
215 if (Frame* mainFrame = getMainFrame(frame)) { 212 if (Frame* mainFrame = getMainFrame(frame)) {
216 if (!mainFrame->eventHandler()->panScrollInProgress()) { 213 if (!mainFrame->eventHandler()->panScrollInProgress()) {
217 stopAutoscrollTimer(); 214 stopAutoscrollTimer();
218 return; 215 return;
219 } 216 }
220 } 217 }
221 if (FrameView* view = frame->view()) 218 if (FrameView* view = frame->view())
222 updatePanScrollState(view, frame->eventHandler()->lastKnownMousePosi tion()); 219 updatePanScrollState(view, frame->eventHandler()->lastKnownMousePosi tion());
(...skipping 11 matching lines...) Expand all
234 #if ENABLE(PAN_SCROLLING) 231 #if ENABLE(PAN_SCROLLING)
235 void AutoscrollController::updatePanScrollState(FrameView* view, const IntPoint& lastKnownMousePosition) 232 void AutoscrollController::updatePanScrollState(FrameView* view, const IntPoint& lastKnownMousePosition)
236 { 233 {
237 // At the original click location we draw a 4 arrowed icon. Over this icon t here won't be any scroll 234 // At the original click location we draw a 4 arrowed icon. Over this icon t here won't be any scroll
238 // So we don't want to change the cursor over this area 235 // So we don't want to change the cursor over this area
239 bool east = m_panScrollStartPos.x() < (lastKnownMousePosition.x() - ScrollVi ew::noPanScrollRadius); 236 bool east = m_panScrollStartPos.x() < (lastKnownMousePosition.x() - ScrollVi ew::noPanScrollRadius);
240 bool west = m_panScrollStartPos.x() > (lastKnownMousePosition.x() + ScrollVi ew::noPanScrollRadius); 237 bool west = m_panScrollStartPos.x() > (lastKnownMousePosition.x() + ScrollVi ew::noPanScrollRadius);
241 bool north = m_panScrollStartPos.y() > (lastKnownMousePosition.y() + ScrollV iew::noPanScrollRadius); 238 bool north = m_panScrollStartPos.y() > (lastKnownMousePosition.y() + ScrollV iew::noPanScrollRadius);
242 bool south = m_panScrollStartPos.y() < (lastKnownMousePosition.y() - ScrollV iew::noPanScrollRadius); 239 bool south = m_panScrollStartPos.y() < (lastKnownMousePosition.y() - ScrollV iew::noPanScrollRadius);
243 240
244 if ((east || west || north || south) && m_panScrollButtonPressed) 241 if (m_autoscrollType == AutoscrollForPan && (east || west || north || south) )
245 m_springLoadedPanScrollInProgress = true; 242 m_autoscrollType = AutoscrollForPanCanStop;
246 243
247 if (north) { 244 if (north) {
248 if (east) 245 if (east)
249 view->setCursor(northEastPanningCursor()); 246 view->setCursor(northEastPanningCursor());
250 else if (west) 247 else if (west)
251 view->setCursor(northWestPanningCursor()); 248 view->setCursor(northWestPanningCursor());
252 else 249 else
253 view->setCursor(northPanningCursor()); 250 view->setCursor(northPanningCursor());
254 } else if (south) { 251 } else if (south) {
255 if (east) 252 if (east)
256 view->setCursor(southEastPanningCursor()); 253 view->setCursor(southEastPanningCursor());
257 else if (west) 254 else if (west)
258 view->setCursor(southWestPanningCursor()); 255 view->setCursor(southWestPanningCursor());
259 else 256 else
260 view->setCursor(southPanningCursor()); 257 view->setCursor(southPanningCursor());
261 } else if (east) 258 } else if (east)
262 view->setCursor(eastPanningCursor()); 259 view->setCursor(eastPanningCursor());
263 else if (west) 260 else if (west)
264 view->setCursor(westPanningCursor()); 261 view->setCursor(westPanningCursor());
265 else 262 else
266 view->setCursor(middlePanningCursor()); 263 view->setCursor(middlePanningCursor());
267 } 264 }
268 #endif 265 #endif
269 266
270 } // namespace WebCore 267 } // namespace WebCore
OLDNEW
« no previous file with comments | « Source/WebCore/page/AutoscrollController.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698