Title: [129909] trunk/Source/WebKit/blackberry
- Revision
- 129909
- Author
- [email protected]
- Date
- 2012-09-28 09:34:07 -0700 (Fri, 28 Sep 2012)
Log Message
[BlackBerry] Exiting fullscreen does not set the correct scroll position
https://bugs.webkit.org/show_bug.cgi?id=97917
PR #212920
Reviewed by Yong Li.
Patch by Antonio Gomes <[email protected]>
Internally reviewed by Jacky Jiang.
Restore the zoom level and scroll position at the time when know
the fullscreen exit routine has ended (i.e. in ::setViewportSize
instead of ::exitFullScreenForElement).
Also patch caches now the scroll position instead of only the
"x scroll position.
* Api/WebPage.cpp:
(BlackBerry::WebKit::WebPagePrivate::WebPagePrivate):
(BlackBerry::WebKit::WebPagePrivate::setViewportSize):
(BlackBerry::WebKit::WebPagePrivate::enterFullScreenForElement):
(BlackBerry::WebKit::WebPagePrivate::exitFullScreenForElement):
* Api/WebPage_p.h:
(WebPagePrivate):
Modified Paths
Diff
Modified: trunk/Source/WebKit/blackberry/Api/WebPage.cpp (129908 => 129909)
--- trunk/Source/WebKit/blackberry/Api/WebPage.cpp 2012-09-28 16:25:45 UTC (rev 129908)
+++ trunk/Source/WebKit/blackberry/Api/WebPage.cpp 2012-09-28 16:34:07 UTC (rev 129909)
@@ -390,7 +390,6 @@
#if ENABLE(FULLSCREEN_API)
#if ENABLE(VIDEO)
, m_scaleBeforeFullScreen(-1.0)
- , m_xScrollOffsetBeforeFullScreen(-1)
#endif
, m_isTogglingFullScreenState(false)
#endif
@@ -3880,6 +3879,22 @@
#if ENABLE(FULLSCREEN_API)
if (m_isTogglingFullScreenState) {
+ if (!m_fullscreenVideoNode) {
+ // When leaving fullscreen mode, we need to restore the scroll position and
+ // zoom level it was at before fullscreen.
+ // FIXME: The cached values might get imprecise if user have rotated the
+ // device while in fullscreen.
+ if (m_scaleBeforeFullScreen > 0) {
+ // Restore the scale when leaving fullscreen. We can't use TransformationMatrix::scale(double) here, as it
+ // will multiply the scale rather than set the scale.
+ // FIXME: We can refactor this into setCurrentScale(double) if it is useful in the future.
+ m_transformationMatrix->setM11(m_scaleBeforeFullScreen);
+ m_transformationMatrix->setM22(m_scaleBeforeFullScreen);
+ m_scaleBeforeFullScreen = -1.0;
+ }
+ m_mainFrame->view()->setScrollPosition(m_scrollOffsetBeforeFullScreen);
+ }
+
m_backingStore->d->resumeScreenAndBackingStoreUpdates(BackingStore::RenderAndBlit);
m_isTogglingFullScreenState = false;
}
@@ -5958,8 +5973,7 @@
// When an element goes fullscreen, the viewport size changes and the scroll
// position might change. So we keep track of it here, in order to restore it
// once element leaves fullscreen.
- WebCore::IntPoint scrollPosition = m_mainFrame->view()->scrollPosition();
- m_xScrollOffsetBeforeFullScreen = scrollPosition.x();
+ m_scrollOffsetBeforeFullScreen = m_mainFrame->view()->scrollPosition();
// The current scale can be clamped to a greater minimum scale when we relayout contents during
// the change of the viewport size. Cache the current scale so that we can restore it when
@@ -5986,24 +6000,6 @@
// The Browser chrome has its own fullscreen video widget.
exitFullscreenForNode(element);
} else {
- // When leaving fullscreen mode, we need to restore the 'x' scroll position
- // before fullscreen.
- // FIXME: We may need to respect 'y' position as well, because the web page always scrolls to
- // the top when leaving fullscreen mode.
- WebCore::IntPoint scrollPosition = m_mainFrame->view()->scrollPosition();
- m_mainFrame->view()->setScrollPosition(
- WebCore::IntPoint(m_xScrollOffsetBeforeFullScreen, scrollPosition.y()));
- m_xScrollOffsetBeforeFullScreen = -1;
-
- if (m_scaleBeforeFullScreen > 0) {
- // Restore the scale when leaving fullscreen. We can't use TransformationMatrix::scale(double) here, as it
- // will multiply the scale rather than set the scale.
- // FIXME: We can refactor this into setCurrentScale(double) if it is useful in the future.
- m_transformationMatrix->setM11(m_scaleBeforeFullScreen);
- m_transformationMatrix->setM22(m_scaleBeforeFullScreen);
- m_scaleBeforeFullScreen = -1.0;
- }
-
// This is where we would restore the browser's chrome
// if hidden above.
client()->fullscreenStop();
Modified: trunk/Source/WebKit/blackberry/Api/WebPage_p.h (129908 => 129909)
--- trunk/Source/WebKit/blackberry/Api/WebPage_p.h 2012-09-28 16:25:45 UTC (rev 129908)
+++ trunk/Source/WebKit/blackberry/Api/WebPage_p.h 2012-09-28 16:34:07 UTC (rev 129909)
@@ -523,7 +523,7 @@
#if ENABLE(FULLSCREEN_API)
#if ENABLE(VIDEO)
double m_scaleBeforeFullScreen;
- int m_xScrollOffsetBeforeFullScreen;
+ WebCore::IntPoint m_scrollOffsetBeforeFullScreen;
#endif
bool m_isTogglingFullScreenState;
#endif
Modified: trunk/Source/WebKit/blackberry/ChangeLog (129908 => 129909)
--- trunk/Source/WebKit/blackberry/ChangeLog 2012-09-28 16:25:45 UTC (rev 129908)
+++ trunk/Source/WebKit/blackberry/ChangeLog 2012-09-28 16:34:07 UTC (rev 129909)
@@ -1,3 +1,27 @@
+2012-09-28 Antonio Gomes <[email protected]>
+
+ [BlackBerry] Exiting fullscreen does not set the correct scroll position
+ https://bugs.webkit.org/show_bug.cgi?id=97917
+ PR #212920
+
+ Reviewed by Yong Li.
+ Internally reviewed by Jacky Jiang.
+
+ Restore the zoom level and scroll position at the time when know
+ the fullscreen exit routine has ended (i.e. in ::setViewportSize
+ instead of ::exitFullScreenForElement).
+
+ Also patch caches now the scroll position instead of only the
+ "x scroll position.
+
+ * Api/WebPage.cpp:
+ (BlackBerry::WebKit::WebPagePrivate::WebPagePrivate):
+ (BlackBerry::WebKit::WebPagePrivate::setViewportSize):
+ (BlackBerry::WebKit::WebPagePrivate::enterFullScreenForElement):
+ (BlackBerry::WebKit::WebPagePrivate::exitFullScreenForElement):
+ * Api/WebPage_p.h:
+ (WebPagePrivate):
+
2012-09-28 Kent Tamura <[email protected]>
Clean up Localizer-related functions
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo/webkit-changes