Changeset 167503 in webkit
- Timestamp:
- Apr 18, 2014 1:31:35 PM (10 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r167498 r167503 1 2014-04-18 Simon Fraser <simon.fraser@apple.com> 2 3 [iOS WK2] Make window.scroll() and window.scrollBy() work 4 https://bugs.webkit.org/show_bug.cgi?id=131848 5 <rdar://problem/16638319> 6 7 Reviewed by Beth Dakin. 8 9 The scrolling-related functions in DOMWindow were #ifdeffed for iOS 10 to use the hacky WK1-specific "actual scroll" functions, which do nothing 11 in WK2. 12 13 Fix by adding a scroll position wrapper (contentsScrollPosition) which does 14 the right thing on WK1 and WK2, and change almost all the places that used "actualScrollPosition" 15 to us it (with the exception of contentsScrollOffset() in MouseRelatedEvent.cpp, which has 16 confusing scaling behavior). 17 18 * dom/MouseRelatedEvent.cpp: 19 (WebCore::MouseRelatedEvent::MouseRelatedEvent): 20 * dom/TreeScope.cpp: 21 (WebCore::nodeFromPoint): Remove #ifdefs. 22 * html/HTMLBodyElement.cpp: 23 (WebCore::HTMLBodyElement::scrollLeft): 24 (WebCore::HTMLBodyElement::scrollTop): 25 * page/DOMWindow.cpp: 26 (WebCore::DOMWindow::scrollX): 27 (WebCore::DOMWindow::scrollY): 28 (WebCore::DOMWindow::scrollBy): 29 (WebCore::DOMWindow::scrollTo): 30 * platform/ScrollView.cpp: 31 (WebCore::ScrollView::contentsScrollPosition): 32 (WebCore::ScrollView::setContentsScrollPosition): 33 * platform/ScrollView.h: 34 1 35 2014-04-18 Simon Fraser <simon.fraser@apple.com> 2 36 -
trunk/Source/WebCore/dom/MouseRelatedEvent.cpp
r164871 r167503 75 75 if (frame && !isSimulated) { 76 76 if (FrameView* frameView = frame->view()) { 77 #if !PLATFORM(IOS) 78 scrollPosition = frameView->scrollPosition(); 79 #else 80 scrollPosition = frameView->actualScrollPosition(); 81 #endif 77 scrollPosition = frameView->contentsScrollPosition(); 82 78 adjustedPageLocation = frameView->windowToContents(windowLocation); 83 79 float scaleFactor = 1 / (frame->pageZoomFactor() * frame->frameScaleFactor()); -
trunk/Source/WebCore/dom/TreeScope.cpp
r165211 r167503 228 228 229 229 float scaleFactor = frame->pageZoomFactor() * frame->frameScaleFactor(); 230 #if !PLATFORM(IOS) 231 IntPoint point = roundedIntPoint(FloatPoint(x * scaleFactor + frameView->scrollX(), y * scaleFactor + frameView->scrollY())); 232 233 if (!frameView->visibleContentRect().contains(point)) 234 return nullptr; 230 231 IntPoint scrollPosition = frameView->contentsScrollPosition(); 232 IntPoint point = roundedIntPoint(FloatPoint(x * scaleFactor + scrollPosition.x(), y * scaleFactor + scrollPosition.y())); 233 234 IntRect visibleRect; 235 #if PLATFORM(IOS) 236 visibleRect = frameView->unobscuredContentRect(); 235 237 #else 236 IntPoint point = roundedIntPoint(FloatPoint(x * scaleFactor + frameView->actualScrollX(), y * scaleFactor + frameView->actualScrollY())); 237 238 if (!frameView->unobscuredContentRect().contains(point)) 239 return nullptr; 238 visibleRect = frameView->visibleContentRect(); 240 239 #endif 240 if (!visibleRect.contains(point)) 241 return nullptr; 242 241 243 HitTestRequest request(HitTestRequest::ReadOnly | HitTestRequest::Active | HitTestRequest::DisallowShadowContent); 242 244 HitTestResult result(point); -
trunk/Source/WebCore/html/HTMLBodyElement.cpp
r163092 r167503 219 219 if (!view) 220 220 return 0; 221 #if PLATFORM(IOS) 222 return adjustForZoom(view->actualScrollX(), *frame); 223 #else 224 return adjustForZoom(view->scrollX(), *frame); 225 #endif 221 return adjustForZoom(view->contentsScrollPosition().x(), *frame); 226 222 } 227 223 … … 247 243 if (!view) 248 244 return 0; 249 #if PLATFORM(IOS) 250 return adjustForZoom(view->actualScrollY(), *frame); 251 #else 252 return adjustForZoom(view->scrollY(), *frame); 253 #endif 245 return adjustForZoom(view->contentsScrollPosition().y(), *frame); 254 246 } 255 247 -
trunk/Source/WebCore/page/DOMWindow.cpp
r166883 r167503 1193 1193 return 0; 1194 1194 1195 int scrollX; 1196 #if PLATFORM(IOS) 1197 scrollX = view->actualScrollX(); 1198 #else 1199 scrollX = view->scrollX(); 1200 #endif 1195 int scrollX = view->contentsScrollPosition().x(); 1201 1196 if (!scrollX) 1202 1197 return 0; … … 1204 1199 m_frame->document()->updateLayoutIgnorePendingStylesheets(); 1205 1200 1206 #if PLATFORM(IOS) 1207 return view->mapFromLayoutToCSSUnits(view->actualScrollX()); 1208 #else 1209 return view->mapFromLayoutToCSSUnits(view->scrollX()); 1210 #endif 1201 return view->mapFromLayoutToCSSUnits(view->contentsScrollPosition().x()); 1211 1202 } 1212 1203 … … 1220 1211 return 0; 1221 1212 1222 int scrollY; 1223 #if PLATFORM(IOS) 1224 scrollY = view->actualScrollY(); 1225 #else 1226 scrollY = view->scrollY(); 1227 #endif 1213 int scrollY = view->contentsScrollPosition().y(); 1228 1214 if (!scrollY) 1229 1215 return 0; … … 1231 1217 m_frame->document()->updateLayoutIgnorePendingStylesheets(); 1232 1218 1233 #if PLATFORM(IOS) 1234 return view->mapFromLayoutToCSSUnits(view->actualScrollY()); 1235 #else 1236 return view->mapFromLayoutToCSSUnits(view->scrollY()); 1237 #endif 1219 return view->mapFromLayoutToCSSUnits(view->contentsScrollPosition().y()); 1238 1220 } 1239 1221 … … 1447 1429 1448 1430 IntSize scaledOffset(view->mapFromCSSToLayoutUnits(x), view->mapFromCSSToLayoutUnits(y)); 1449 #if PLATFORM(IOS) 1450 view->setActualScrollPosition(view->actualScrollPosition() + scaledOffset); 1451 #else 1452 view->scrollBy(scaledOffset); 1453 #endif 1431 view->setContentsScrollPosition(view->contentsScrollPosition() + scaledOffset); 1454 1432 } 1455 1433 … … 1465 1443 return; 1466 1444 1467 1468 #if PLATFORM(IOS)1469 int zoomedX = static_cast<int>(x * m_frame->pageZoomFactor() * m_frame->frameScaleFactor());1470 int zoomedY = static_cast<int>(y * m_frame->pageZoomFactor() * m_frame->frameScaleFactor());1471 view->setActualScrollPosition(IntPoint(zoomedX, zoomedY));1472 #else1473 1445 IntPoint layoutPos(view->mapFromCSSToLayoutUnits(x), view->mapFromCSSToLayoutUnits(y)); 1474 view->setScrollPosition(layoutPos); 1475 #endif 1446 view->setContentsScrollPosition(layoutPos); 1476 1447 } 1477 1448 -
trunk/Source/WebCore/platform/ScrollView.cpp
r167415 r167503 237 237 } 238 238 239 IntPoint ScrollView::contentsScrollPosition() const 240 { 241 #if PLATFORM(IOS) 242 if (platformWidget()) 243 return actualScrollPosition(); 244 #endif 245 return scrollPosition(); 246 } 247 248 void ScrollView::setContentsScrollPosition(const IntPoint& position) 249 { 250 #if PLATFORM(IOS) 251 if (platformWidget()) 252 setActualScrollPosition(position); 253 #endif 254 setScrollPosition(position); 255 } 256 239 257 #if !PLATFORM(IOS) 240 258 IntRect ScrollView::unobscuredContentRect(VisibleContentRectIncludesScrollbars scrollbarInclusion) const -
trunk/Source/WebCore/platform/ScrollView.h
r166529 r167503 230 230 int scrollY() const { return scrollPosition().y(); } 231 231 232 // Scroll position used by web-exposed features (has legacy iOS behavior). 233 IntPoint contentsScrollPosition() const; 234 void setContentsScrollPosition(const IntPoint&); 235 232 236 #if PLATFORM(IOS) 233 237 int actualScrollX() const { return unobscuredContentRect().x(); }
Note: See TracChangeset
for help on using the changeset viewer.