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

Reply via email to