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

Unified Diff: Source/core/frame/LocalDOMWindow.cpp

Issue 879913003: Use IntRect instead of FloatRect for window positions and sizes (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: added FIXME comments Created 5 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « Source/core/frame/LocalDOMWindow.h ('k') | Source/core/frame/RemoteDOMWindow.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/core/frame/LocalDOMWindow.cpp
diff --git a/Source/core/frame/LocalDOMWindow.cpp b/Source/core/frame/LocalDOMWindow.cpp
index c10d324c965985153d8efb6d241f5bb3396ea0ec..f2f19e14a2b9bbe4f84ae0b3309272fea0222c2e 100644
--- a/Source/core/frame/LocalDOMWindow.cpp
+++ b/Source/core/frame/LocalDOMWindow.cpp
@@ -101,7 +101,7 @@
#include "platform/PlatformScreen.h"
#include "platform/RuntimeEnabledFeatures.h"
#include "platform/UserGestureIndicator.h"
-#include "platform/geometry/FloatRect.h"
+#include "platform/geometry/IntRect.h"
#include "platform/weborigin/KURL.h"
#include "platform/weborigin/SecurityOrigin.h"
#include "platform/weborigin/SecurityPolicy.h"
@@ -327,40 +327,19 @@ unsigned LocalDOMWindow::pendingUnloadEventListeners() const
}
// This function:
-// 1) Validates the pending changes are not changing any value to NaN; in that case keep original value.
-// 2) Constrains the window rect to the minimum window size and no bigger than the float rect's dimensions.
-// 3) Constrains the window rect to within the top and left boundaries of the available screen rect.
-// 4) Constrains the window rect to within the bottom and right boundaries of the available screen rect.
-// 5) Translate the window rect coordinates to be within the coordinate space of the screen.
-FloatRect LocalDOMWindow::adjustWindowRect(LocalFrame& frame, const FloatRect& pendingChanges)
+// 1) Constrains the window rect to the minimum window size and no bigger than the int rect's dimensions.
+// 2) Constrains the window rect to within the top and left boundaries of the available screen rect.
+// 3) Constrains the window rect to within the bottom and right boundaries of the available screen rect.
+// 4) Translate the window rect coordinates to be within the coordinate space of the screen.
+IntRect LocalDOMWindow::adjustWindowRect(LocalFrame& frame, const IntRect& pendingChanges)
{
FrameHost* host = frame.host();
ASSERT(host);
- FloatRect screen = screenAvailableRect(frame.view());
- FloatRect window = host->chrome().windowRect();
-
- // Make sure we're in a valid state before adjusting dimensions.
- ASSERT(std::isfinite(screen.x()));
- ASSERT(std::isfinite(screen.y()));
- ASSERT(std::isfinite(screen.width()));
- ASSERT(std::isfinite(screen.height()));
- ASSERT(std::isfinite(window.x()));
- ASSERT(std::isfinite(window.y()));
- ASSERT(std::isfinite(window.width()));
- ASSERT(std::isfinite(window.height()));
-
- // Update window values if new requested values are not NaN.
- if (!std::isnan(pendingChanges.x()))
- window.setX(pendingChanges.x());
- if (!std::isnan(pendingChanges.y()))
- window.setY(pendingChanges.y());
- if (!std::isnan(pendingChanges.width()))
- window.setWidth(pendingChanges.width());
- if (!std::isnan(pendingChanges.height()))
- window.setHeight(pendingChanges.height());
-
- FloatSize minimumSize = host->chrome().client().minimumWindowSize();
+ IntRect screen = screenAvailableRect(frame.view());
+ IntRect window = pendingChanges;
+
+ IntSize minimumSize = host->chrome().client().minimumWindowSize();
// Let size 0 pass through, since that indicates default size, not minimum size.
if (window.width())
window.setWidth(min(max(minimumSize.width(), window.width()), screen.width()));
@@ -1070,7 +1049,7 @@ int LocalDOMWindow::outerHeight() const
if (host->settings().reportScreenSizeInPhysicalPixelsQuirk())
return lroundf(host->chrome().windowRect().height() * host->deviceScaleFactor());
- return static_cast<int>(host->chrome().windowRect().height());
+ return host->chrome().windowRect().height();
}
int LocalDOMWindow::outerWidth() const
@@ -1084,7 +1063,7 @@ int LocalDOMWindow::outerWidth() const
if (host->settings().reportScreenSizeInPhysicalPixelsQuirk())
return lroundf(host->chrome().windowRect().width() * host->deviceScaleFactor());
- return static_cast<int>(host->chrome().windowRect().width());
+ return host->chrome().windowRect().width();
}
int LocalDOMWindow::innerHeight() const
@@ -1150,7 +1129,7 @@ int LocalDOMWindow::screenX() const
if (host->settings().reportScreenSizeInPhysicalPixelsQuirk())
return lroundf(host->chrome().windowRect().x() * host->deviceScaleFactor());
- return static_cast<int>(host->chrome().windowRect().x());
+ return host->chrome().windowRect().x();
}
int LocalDOMWindow::screenY() const
@@ -1164,7 +1143,7 @@ int LocalDOMWindow::screenY() const
if (host->settings().reportScreenSizeInPhysicalPixelsQuirk())
return lroundf(host->chrome().windowRect().y() * host->deviceScaleFactor());
- return static_cast<int>(host->chrome().windowRect().y());
+ return host->chrome().windowRect().y();
}
double LocalDOMWindow::scrollX() const
@@ -1420,7 +1399,7 @@ void LocalDOMWindow::scrollTo(const ScrollToOptions& scrollToOptions) const
scrollViewportTo(frame(), DoublePoint(scaledX, scaledY), scrollBehavior);
}
-void LocalDOMWindow::moveBy(float x, float y) const
+void LocalDOMWindow::moveBy(int x, int y) const
{
if (!frame() || !frame()->isMainFrame())
return;
@@ -1429,13 +1408,13 @@ void LocalDOMWindow::moveBy(float x, float y) const
if (!host)
return;
- FloatRect windowRect = host->chrome().windowRect();
+ IntRect windowRect = host->chrome().windowRect();
windowRect.move(x, y);
// Security check (the spec talks about UniversalBrowserWrite to disable this check...)
host->chrome().setWindowRect(adjustWindowRect(*frame(), windowRect));
}
-void LocalDOMWindow::moveTo(float x, float y) const
+void LocalDOMWindow::moveTo(int x, int y, bool hasX, bool hasY) const
{
if (!frame() || !frame()->isMainFrame())
return;
@@ -1444,13 +1423,13 @@ void LocalDOMWindow::moveTo(float x, float y) const
if (!host)
return;
- FloatRect windowRect = host->chrome().windowRect();
- windowRect.setLocation(FloatPoint(x, y));
+ IntRect windowRect = host->chrome().windowRect();
+ windowRect.setLocation(IntPoint(hasX ? x : windowRect.x(), hasY ? y : windowRect.y()));
// Security check (the spec talks about UniversalBrowserWrite to disable this check...)
host->chrome().setWindowRect(adjustWindowRect(*frame(), windowRect));
}
-void LocalDOMWindow::resizeBy(float x, float y) const
+void LocalDOMWindow::resizeBy(int x, int y) const
{
if (!frame() || !frame()->isMainFrame())
return;
@@ -1459,13 +1438,13 @@ void LocalDOMWindow::resizeBy(float x, float y) const
if (!host)
return;
- FloatRect fr = host->chrome().windowRect();
- FloatSize dest = fr.size() + FloatSize(x, y);
- FloatRect update(fr.location(), dest);
+ IntRect fr = host->chrome().windowRect();
+ IntSize dest = fr.size() + IntSize(x, y);
+ IntRect update(fr.location(), dest);
host->chrome().setWindowRect(adjustWindowRect(*frame(), update));
}
-void LocalDOMWindow::resizeTo(float width, float height) const
+void LocalDOMWindow::resizeTo(int width, int height, bool hasWidth, bool hasHeight) const
{
if (!frame() || !frame()->isMainFrame())
return;
@@ -1474,9 +1453,9 @@ void LocalDOMWindow::resizeTo(float width, float height) const
if (!host)
return;
- FloatRect fr = host->chrome().windowRect();
- FloatSize dest = FloatSize(width, height);
- FloatRect update(fr.location(), dest);
+ IntRect fr = host->chrome().windowRect();
+ IntSize dest = IntSize(hasWidth ? width : fr.width(), hasHeight ? height : fr.height());
+ IntRect update(fr.location(), dest);
host->chrome().setWindowRect(adjustWindowRect(*frame(), update));
}
« no previous file with comments | « Source/core/frame/LocalDOMWindow.h ('k') | Source/core/frame/RemoteDOMWindow.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698