Title: [132390] trunk/Source/WebKit/blackberry
Revision
132390
Author
[email protected]
Date
2012-10-24 13:30:39 -0700 (Wed, 24 Oct 2012)

Log Message

[BlackBerry][Fullscreen] Roll out changes to fullscreen which rely on viewport size change
https://bugs.webkit.org/show_bug.cgi?id=100259

Reviewed by Rob Buis.
Patch by Jacky Jiang <[email protected]>.

PR: 219666
Roll out r130392 and r129909.
The patches rely on the viewport size change of the client side to
update the scale and scroll position of the video. However, some client
sides don't need or wish to resize the WebKit viewport at all.

* 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 (132389 => 132390)


--- trunk/Source/WebKit/blackberry/Api/WebPage.cpp	2012-10-24 20:20:59 UTC (rev 132389)
+++ trunk/Source/WebKit/blackberry/Api/WebPage.cpp	2012-10-24 20:30:39 UTC (rev 132390)
@@ -401,6 +401,7 @@
 #if ENABLE(FULLSCREEN_API)
 #if ENABLE(VIDEO)
     , m_scaleBeforeFullScreen(-1.0)
+    , m_xScrollOffsetBeforeFullScreen(-1)
 #endif
     , m_isTogglingFullScreenState(false)
 #endif
@@ -3851,23 +3852,6 @@
 
 #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);
-            notifyTransformChanged();
-        }
-
         m_backingStore->d->resumeScreenAndBackingStoreUpdates(BackingStore::RenderAndBlit);
         m_isTogglingFullScreenState = false;
     }
@@ -5966,7 +5950,8 @@
         // 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.
-        m_scrollOffsetBeforeFullScreen = m_mainFrame->view()->scrollPosition();
+        WebCore::IntPoint scrollPosition = m_mainFrame->view()->scrollPosition();
+        m_xScrollOffsetBeforeFullScreen = scrollPosition.x();
 
         // 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
@@ -5993,6 +5978,24 @@
         // 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 (132389 => 132390)


--- trunk/Source/WebKit/blackberry/Api/WebPage_p.h	2012-10-24 20:20:59 UTC (rev 132389)
+++ trunk/Source/WebKit/blackberry/Api/WebPage_p.h	2012-10-24 20:30:39 UTC (rev 132390)
@@ -530,7 +530,7 @@
 #if ENABLE(FULLSCREEN_API)
 #if ENABLE(VIDEO)
     double m_scaleBeforeFullScreen;
-    WebCore::IntPoint m_scrollOffsetBeforeFullScreen;
+    int m_xScrollOffsetBeforeFullScreen;
 #endif
     bool m_isTogglingFullScreenState;
 #endif

Modified: trunk/Source/WebKit/blackberry/ChangeLog (132389 => 132390)


--- trunk/Source/WebKit/blackberry/ChangeLog	2012-10-24 20:20:59 UTC (rev 132389)
+++ trunk/Source/WebKit/blackberry/ChangeLog	2012-10-24 20:30:39 UTC (rev 132390)
@@ -1,3 +1,24 @@
+2012-10-24  Jacky Jiang  <[email protected]>
+
+        [BlackBerry][Fullscreen] Roll out changes to fullscreen which rely on viewport size change
+        https://bugs.webkit.org/show_bug.cgi?id=100259
+
+        Reviewed by Rob Buis.
+
+        PR: 219666
+        Roll out r130392 and r129909.
+        The patches rely on the viewport size change of the client side to
+        update the scale and scroll position of the video. However, some client
+        sides don't need or wish to resize the WebKit viewport at all.
+
+        * 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-10-24  Otto Derek Cheung  <[email protected]>
 
         [BlackBerry] Rename GeolocationControllerClientBlackBerry to GeolocationClientBlackBerry
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to