[iOS][wk2] Don't use view snapshots if the destination layer is a different size
authortimothy_horton@apple.com <timothy_horton@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 23 Jun 2014 22:12:49 +0000 (22:12 +0000)
committertimothy_horton@apple.com <timothy_horton@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 23 Jun 2014 22:12:49 +0000 (22:12 +0000)
https://bugs.webkit.org/show_bug.cgi?id=134210
<rdar://problem/17369463>

Reviewed by Benjamin Poulain.

* UIProcess/ios/ViewGestureControllerIOS.mm:
(WebKit::ViewGestureController::beginSwipeGesture):
Only use the view snapshot if the snapshot is the same (in device space) size
as the layer it's going to be put into, and only if the device scale factor is
the same as it was when the snapshot was taken.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@170326 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/WebKit2/ChangeLog
Source/WebKit2/UIProcess/ios/ViewGestureControllerIOS.mm

index 74d51996245150d96bd532392b98bbc3004bde10..bd190043332fb165d4ca4fa6498df3da4aec529a 100644 (file)
@@ -1,3 +1,17 @@
+2014-06-23  Timothy Horton  <timothy_horton@apple.com>
+
+        [iOS][wk2] Don't use view snapshots if the destination layer is a different size
+        https://bugs.webkit.org/show_bug.cgi?id=134210
+        <rdar://problem/17369463>
+
+        Reviewed by Benjamin Poulain.
+
+        * UIProcess/ios/ViewGestureControllerIOS.mm:
+        (WebKit::ViewGestureController::beginSwipeGesture):
+        Only use the view snapshot if the snapshot is the same (in device space) size
+        as the layer it's going to be put into, and only if the device scale factor is
+        the same as it was when the snapshot was taken.
+
 2014-06-23  Benjamin Poulain  <bpoulain@apple.com>
 
         [iOS][WK2] Make the state restore from HistoryItem more precise and reliable
index bf700296254e9c092feb5df4135957853569ec06..b87bb75d303107a6eb527584d97728e8ed3dc004 100644 (file)
@@ -158,8 +158,13 @@ void ViewGestureController::beginSwipeGesture(_UINavigationInteractiveTransition
     m_snapshotView = adoptNS([[UIView alloc] initWithFrame:liveSwipeViewFrame]);
 
     ViewSnapshot snapshot;
-    if (ViewSnapshotStore::shared().getSnapshot(targetItem, snapshot) && snapshot.hasImage())
-        [m_snapshotView layer].contents = snapshot.asLayerContents();
+    if (ViewSnapshotStore::shared().getSnapshot(targetItem, snapshot) && snapshot.hasImage()) {
+        float deviceScaleFactor = m_webPageProxy.deviceScaleFactor();
+        FloatSize swipeLayerSizeInDeviceCoordinates(liveSwipeViewFrame.size);
+        swipeLayerSizeInDeviceCoordinates.scale(deviceScaleFactor);
+        if (snapshot.size == swipeLayerSizeInDeviceCoordinates && deviceScaleFactor == snapshot.deviceScaleFactor)
+            [m_snapshotView layer].contents = snapshot.asLayerContents();
+    }
 
     [m_snapshotView setBackgroundColor:[UIColor whiteColor]];
     [m_snapshotView layer].contentsGravity = kCAGravityTopLeft;