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

Side by Side Diff: third_party/WebKit/Source/core/frame/LocalDOMWindow.cpp

Issue 2387883002: Use float for scroll offset. (Closed)
Patch Set: Fix README.md Created 4 years, 2 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
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2006, 2007, 2008, 2010 Apple Inc. All rights reserved. 2 * Copyright (C) 2006, 2007, 2008, 2010 Apple Inc. All rights reserved.
3 * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies) 3 * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies)
4 * 4 *
5 * Redistribution and use in source and binary forms, with or without 5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions 6 * modification, are permitted provided that the following conditions
7 * are met: 7 * are met:
8 * 1. Redistributions of source code must retain the above copyright 8 * 1. 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 * 2. Redistributions in binary form must reproduce the above copyright 10 * 2. Redistributions in binary form must reproduce the above copyright
(...skipping 958 matching lines...) Expand 10 before | Expand all | Expand 10 after
969 if (!frame()->host()->settings().inertVisualViewport()) 969 if (!frame()->host()->settings().inertVisualViewport())
970 return m_visualViewport->pageX(); 970 return m_visualViewport->pageX();
971 971
972 FrameView* view = frame()->view(); 972 FrameView* view = frame()->view();
973 if (!view) 973 if (!view)
974 return 0; 974 return 0;
975 975
976 document()->updateStyleAndLayoutIgnorePendingStylesheets(); 976 document()->updateStyleAndLayoutIgnorePendingStylesheets();
977 977
978 double viewportX = 978 double viewportX =
979 view->layoutViewportScrollableArea()->scrollPositionDouble().x(); 979 view->layoutViewportScrollableArea()->scrollOffset().width();
980 return adjustScrollForAbsoluteZoom(viewportX, frame()->pageZoomFactor()); 980 return adjustScrollForAbsoluteZoom(viewportX, frame()->pageZoomFactor());
981 } 981 }
982 982
983 double LocalDOMWindow::scrollY() const { 983 double LocalDOMWindow::scrollY() const {
984 if (!frame() || !frame()->host()) 984 if (!frame() || !frame()->host())
985 return 0; 985 return 0;
986 986
987 if (!frame()->host()->settings().inertVisualViewport()) 987 if (!frame()->host()->settings().inertVisualViewport())
988 return m_visualViewport->pageY(); 988 return m_visualViewport->pageY();
989 989
990 FrameView* view = frame()->view(); 990 FrameView* view = frame()->view();
991 if (!view) 991 if (!view)
992 return 0; 992 return 0;
993 993
994 document()->updateStyleAndLayoutIgnorePendingStylesheets(); 994 document()->updateStyleAndLayoutIgnorePendingStylesheets();
995 995
996 double viewportY = 996 double viewportY =
997 view->layoutViewportScrollableArea()->scrollPositionDouble().y(); 997 view->layoutViewportScrollableArea()->scrollOffset().height();
998 return adjustScrollForAbsoluteZoom(viewportY, frame()->pageZoomFactor()); 998 return adjustScrollForAbsoluteZoom(viewportY, frame()->pageZoomFactor());
999 } 999 }
1000 1000
1001 DOMVisualViewport* LocalDOMWindow::visualViewport() { 1001 DOMVisualViewport* LocalDOMWindow::visualViewport() {
1002 if (!frame()) 1002 if (!frame())
1003 return nullptr; 1003 return nullptr;
1004 1004
1005 return m_visualViewport; 1005 return m_visualViewport;
1006 } 1006 }
1007 1007
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after
1113 if (!host) 1113 if (!host)
1114 return; 1114 return;
1115 1115
1116 x = ScrollableArea::normalizeNonFiniteScroll(x); 1116 x = ScrollableArea::normalizeNonFiniteScroll(x);
1117 y = ScrollableArea::normalizeNonFiniteScroll(y); 1117 y = ScrollableArea::normalizeNonFiniteScroll(y);
1118 1118
1119 ScrollableArea* viewport = host->settings().inertVisualViewport() 1119 ScrollableArea* viewport = host->settings().inertVisualViewport()
1120 ? view->layoutViewportScrollableArea() 1120 ? view->layoutViewportScrollableArea()
1121 : view->getScrollableArea(); 1121 : view->getScrollableArea();
1122 1122
1123 DoublePoint currentOffset = viewport->scrollPositionDouble(); 1123 ScrollOffset currentOffset = viewport->scrollOffset();
1124 DoubleSize scaledDelta(x * frame()->pageZoomFactor(), 1124 ScrollOffset scaledDelta(x * frame()->pageZoomFactor(),
1125 y * frame()->pageZoomFactor()); 1125 y * frame()->pageZoomFactor());
1126 1126
1127 viewport->setScrollPosition(currentOffset + scaledDelta, ProgrammaticScroll, 1127 viewport->setScrollOffset(currentOffset + scaledDelta, ProgrammaticScroll,
1128 scrollBehavior); 1128 scrollBehavior);
1129 } 1129 }
1130 1130
1131 void LocalDOMWindow::scrollBy(const ScrollToOptions& scrollToOptions) const { 1131 void LocalDOMWindow::scrollBy(const ScrollToOptions& scrollToOptions) const {
1132 double x = 0.0; 1132 double x = 0.0;
1133 double y = 0.0; 1133 double y = 0.0;
1134 if (scrollToOptions.hasLeft()) 1134 if (scrollToOptions.hasLeft())
1135 x = scrollToOptions.left(); 1135 x = scrollToOptions.left();
1136 if (scrollToOptions.hasTop()) 1136 if (scrollToOptions.hasTop())
1137 y = scrollToOptions.top(); 1137 y = scrollToOptions.top();
1138 ScrollBehavior scrollBehavior = ScrollBehaviorAuto; 1138 ScrollBehavior scrollBehavior = ScrollBehaviorAuto;
(...skipping 15 matching lines...) Expand all
1154 return; 1154 return;
1155 1155
1156 x = ScrollableArea::normalizeNonFiniteScroll(x); 1156 x = ScrollableArea::normalizeNonFiniteScroll(x);
1157 y = ScrollableArea::normalizeNonFiniteScroll(y); 1157 y = ScrollableArea::normalizeNonFiniteScroll(y);
1158 1158
1159 // It is only necessary to have an up-to-date layout if the position may be 1159 // It is only necessary to have an up-to-date layout if the position may be
1160 // clamped, which is never the case for (0, 0). 1160 // clamped, which is never the case for (0, 0).
1161 if (x || y) 1161 if (x || y)
1162 document()->updateStyleAndLayoutIgnorePendingStylesheets(); 1162 document()->updateStyleAndLayoutIgnorePendingStylesheets();
1163 1163
1164 DoublePoint layoutPos(x * frame()->pageZoomFactor(), 1164 ScrollOffset layoutOffset(x * frame()->pageZoomFactor(),
1165 y * frame()->pageZoomFactor()); 1165 y * frame()->pageZoomFactor());
1166 ScrollableArea* viewport = host->settings().inertVisualViewport() 1166 ScrollableArea* viewport = host->settings().inertVisualViewport()
1167 ? view->layoutViewportScrollableArea() 1167 ? view->layoutViewportScrollableArea()
1168 : view->getScrollableArea(); 1168 : view->getScrollableArea();
1169 viewport->setScrollPosition(layoutPos, ProgrammaticScroll, 1169 viewport->setScrollOffset(layoutOffset, ProgrammaticScroll,
1170 ScrollBehaviorAuto); 1170 ScrollBehaviorAuto);
1171 } 1171 }
1172 1172
1173 void LocalDOMWindow::scrollTo(const ScrollToOptions& scrollToOptions) const { 1173 void LocalDOMWindow::scrollTo(const ScrollToOptions& scrollToOptions) const {
1174 if (!isCurrentlyDisplayedInFrame()) 1174 if (!isCurrentlyDisplayedInFrame())
1175 return; 1175 return;
1176 1176
1177 FrameView* view = frame()->view(); 1177 FrameView* view = frame()->view();
1178 if (!view) 1178 if (!view)
1179 return; 1179 return;
1180 1180
1181 FrameHost* host = frame()->host(); 1181 FrameHost* host = frame()->host();
1182 if (!host) 1182 if (!host)
1183 return; 1183 return;
1184 1184
1185 // It is only necessary to have an up-to-date layout if the position may be 1185 // It is only necessary to have an up-to-date layout if the position may be
1186 // clamped, which is never the case for (0, 0). 1186 // clamped, which is never the case for (0, 0).
1187 if (!scrollToOptions.hasLeft() || !scrollToOptions.hasTop() || 1187 if (!scrollToOptions.hasLeft() || !scrollToOptions.hasTop() ||
1188 scrollToOptions.left() || scrollToOptions.top()) { 1188 scrollToOptions.left() || scrollToOptions.top()) {
1189 document()->updateStyleAndLayoutIgnorePendingStylesheets(); 1189 document()->updateStyleAndLayoutIgnorePendingStylesheets();
1190 } 1190 }
1191 1191
1192 double scaledX = 0.0; 1192 double scaledX = 0.0;
1193 double scaledY = 0.0; 1193 double scaledY = 0.0;
1194 1194
1195 ScrollableArea* viewport = host->settings().inertVisualViewport() 1195 ScrollableArea* viewport = host->settings().inertVisualViewport()
1196 ? view->layoutViewportScrollableArea() 1196 ? view->layoutViewportScrollableArea()
1197 : view->getScrollableArea(); 1197 : view->getScrollableArea();
1198 1198
1199 DoublePoint currentOffset = viewport->scrollPositionDouble(); 1199 ScrollOffset currentOffset = viewport->scrollOffset();
1200 scaledX = currentOffset.x(); 1200 scaledX = currentOffset.width();
1201 scaledY = currentOffset.y(); 1201 scaledY = currentOffset.height();
1202 1202
1203 if (scrollToOptions.hasLeft()) 1203 if (scrollToOptions.hasLeft())
1204 scaledX = ScrollableArea::normalizeNonFiniteScroll(scrollToOptions.left()) * 1204 scaledX = ScrollableArea::normalizeNonFiniteScroll(scrollToOptions.left()) *
1205 frame()->pageZoomFactor(); 1205 frame()->pageZoomFactor();
1206 1206
1207 if (scrollToOptions.hasTop()) 1207 if (scrollToOptions.hasTop())
1208 scaledY = ScrollableArea::normalizeNonFiniteScroll(scrollToOptions.top()) * 1208 scaledY = ScrollableArea::normalizeNonFiniteScroll(scrollToOptions.top()) *
1209 frame()->pageZoomFactor(); 1209 frame()->pageZoomFactor();
1210 1210
1211 ScrollBehavior scrollBehavior = ScrollBehaviorAuto; 1211 ScrollBehavior scrollBehavior = ScrollBehaviorAuto;
1212 ScrollableArea::scrollBehaviorFromString(scrollToOptions.behavior(), 1212 ScrollableArea::scrollBehaviorFromString(scrollToOptions.behavior(),
1213 scrollBehavior); 1213 scrollBehavior);
1214 1214
1215 viewport->setScrollPosition(DoublePoint(scaledX, scaledY), ProgrammaticScroll, 1215 viewport->setScrollOffset(ScrollOffset(scaledX, scaledY), ProgrammaticScroll,
1216 scrollBehavior); 1216 scrollBehavior);
1217 } 1217 }
1218 1218
1219 void LocalDOMWindow::moveBy(int x, int y) const { 1219 void LocalDOMWindow::moveBy(int x, int y) const {
1220 if (!frame() || !frame()->isMainFrame()) 1220 if (!frame() || !frame()->isMainFrame())
1221 return; 1221 return;
1222 1222
1223 FrameHost* host = frame()->host(); 1223 FrameHost* host = frame()->host();
1224 if (!host) 1224 if (!host)
1225 return; 1225 return;
1226 1226
(...skipping 328 matching lines...) Expand 10 before | Expand all | Expand 10 after
1555 1555
1556 LocalFrame* LocalDOMWindow::frame() const { 1556 LocalFrame* LocalDOMWindow::frame() const {
1557 // If the LocalDOMWindow still has a frame reference, that frame must point 1557 // If the LocalDOMWindow still has a frame reference, that frame must point
1558 // back to this LocalDOMWindow: otherwise, it's easy to get into a situation 1558 // back to this LocalDOMWindow: otherwise, it's easy to get into a situation
1559 // where script execution leaks between different LocalDOMWindows. 1559 // where script execution leaks between different LocalDOMWindows.
1560 SECURITY_DCHECK(!m_frame || m_frame->domWindow() == this); 1560 SECURITY_DCHECK(!m_frame || m_frame->domWindow() == this);
1561 return m_frame; 1561 return m_frame;
1562 } 1562 }
1563 1563
1564 } // namespace blink 1564 } // namespace blink
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/core/frame/FrameViewTest.cpp ('k') | third_party/WebKit/Source/core/frame/LocalFrame.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698