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

Side by Side Diff: Source/web/PopupContainer.cpp

Issue 1109213002: Make createWindow (mostly) work with OOPIF (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Fix popup unit test failures Created 5 years, 7 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 | Annotate | Revision Log
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2011, Google Inc. All rights reserved. 2 * Copyright (c) 2011, Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are 5 * modification, are permitted provided that the following conditions are
6 * met: 6 * met:
7 * 7 *
8 * * Redistributions of source code must retain the above copyright 8 * * 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 * * Redistributions in binary form must reproduce the above 10 * * Redistributions in binary form must reproduce the above
(...skipping 182 matching lines...) Expand 10 before | Expand all | Expand 10 after
193 // points. If the <select>/<input> is transformed, they are not the same. 193 // points. If the <select>/<input> is transformed, they are not the same.
194 int verticalOffset = - m_controlPosition.p4().y() + m_controlPosition.p3().y (); 194 int verticalOffset = - m_controlPosition.p4().y() + m_controlPosition.p3().y ();
195 int verticalForRTLOffset = isRTL ? verticalOffset : 0; 195 int verticalForRTLOffset = isRTL ? verticalOffset : 0;
196 196
197 // Assume m_listBox size is already calculated. 197 // Assume m_listBox size is already calculated.
198 IntSize targetSize(m_listBox->width() + borderSize * 2, m_listBox->height() + borderSize * 2); 198 IntSize targetSize(m_listBox->width() + borderSize * 2, m_listBox->height() + borderSize * 2);
199 199
200 IntRect widgetRectInScreen; 200 IntRect widgetRectInScreen;
201 // If the popup would extend past the bottom of the screen, open upwards 201 // If the popup would extend past the bottom of the screen, open upwards
202 // instead. 202 // instead.
203 IntRect screen = screenAvailableRect(m_frameView.get()); 203 Widget* rootWidget = m_frameView.get();
204 while (rootWidget->parent())
205 rootWidget = rootWidget->parent();
206 IntRect screen = rootWidget->hostWindow() ? screenAvailableRect(*rootWidget- >hostWindow()) : IntRect();
dcheng 2015/05/04 17:38:11 Does m_frameView->root() not work here?
204 // Use popupInitialCoordinate.x() + rightOffset because RTL position 207 // Use popupInitialCoordinate.x() + rightOffset because RTL position
205 // needs to be considered. 208 // needs to be considered.
206 float pageScaleFactor = m_frameView->frame().page()->pageScaleFactor(); 209 float pageScaleFactor = m_frameView->frame().page()->pageScaleFactor();
207 int popupX = round((popupInitialCoordinate.x() + rightOffset) * pageScaleFac tor); 210 int popupX = round((popupInitialCoordinate.x() + rightOffset) * pageScaleFac tor);
208 int popupY = round((popupInitialCoordinate.y() + verticalForRTLOffset) * pag eScaleFactor); 211 int popupY = round((popupInitialCoordinate.y() + verticalForRTLOffset) * pag eScaleFactor);
209 widgetRectInScreen = chromeClient().viewportToScreen(IntRect(popupX, popupY, targetSize.width(), targetSize.height())); 212 widgetRectInScreen = chromeClient().viewportToScreen(IntRect(popupX, popupY, targetSize.width(), targetSize.height()));
210 213
211 // If we have multiple screens and the browser rect is in one screen, we 214 // If we have multiple screens and the browser rect is in one screen, we
212 // have to clip the window width to the screen width. 215 // have to clip the window width to the screen width.
213 // When clipping, we also need to set a maximum width for the list box. 216 // When clipping, we also need to set a maximum width for the list box.
(...skipping 279 matching lines...) Expand 10 before | Expand all | Expand 10 after
493 } 496 }
494 497
495 IntPoint PopupContainer::convertSelfToChild(const Widget* child, const IntPoint& point) const 498 IntPoint PopupContainer::convertSelfToChild(const Widget* child, const IntPoint& point) const
496 { 499 {
497 IntPoint newPoint = point; 500 IntPoint newPoint = point;
498 newPoint.moveBy(-child->location()); 501 newPoint.moveBy(-child->location());
499 return newPoint; 502 return newPoint;
500 } 503 }
501 504
502 } // namespace blink 505 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698