Title: [165022] trunk/Source/WebKit2
Revision
165022
Author
enr...@apple.com
Date
2014-03-03 17:00:00 -0800 (Mon, 03 Mar 2014)

Log Message

[iOS WebKit2]: Text fields don't zoom in when focused
https://bugs.webkit.org/show_bug.cgi?id=129632
<rdar://problem/16185230>

Reviewed by Benjamin Poulain.

When focusing the node we need to zoom and center it and possibly
scroll to make it visible.
On iPad we only scroll, without zooming.

* Shared/AssistedNodeInformation.cpp:
(WebKit::AssistedNodeInformation::encode):
(WebKit::AssistedNodeInformation::decode):
* Shared/AssistedNodeInformation.h:
(WebKit::AssistedNodeInformation::AssistedNodeInformation):
* UIProcess/API/Cocoa/WKWebViewInternal.h:
* UIProcess/ios/WKContentView.h:
* UIProcess/ios/WKContentView.mm:
(-[WKContentView _scrollToRect:withOrigin:minimumScrollDistance:]):
* UIProcess/ios/WKContentViewInteraction.mm:
(-[WKContentView _displayFormNodeInputView]):
(-[WKContentView _startAssistingNode:]):
* WebProcess/WebPage/ios/WebPageIOS.mm:
(WebKit::WebPage::getAssistedNodeInformation):

Modified Paths

Diff

Modified: trunk/Source/WebKit2/ChangeLog (165021 => 165022)


--- trunk/Source/WebKit2/ChangeLog	2014-03-04 00:49:19 UTC (rev 165021)
+++ trunk/Source/WebKit2/ChangeLog	2014-03-04 01:00:00 UTC (rev 165022)
@@ -1,3 +1,30 @@
+2014-03-03  Enrica Casucci  <enr...@apple.com>
+
+        [iOS WebKit2]: Text fields don't zoom in when focused
+        https://bugs.webkit.org/show_bug.cgi?id=129632
+        <rdar://problem/16185230>
+
+        Reviewed by Benjamin Poulain.
+
+        When focusing the node we need to zoom and center it and possibly
+        scroll to make it visible.
+        On iPad we only scroll, without zooming.
+
+        * Shared/AssistedNodeInformation.cpp:
+        (WebKit::AssistedNodeInformation::encode):
+        (WebKit::AssistedNodeInformation::decode):
+        * Shared/AssistedNodeInformation.h:
+        (WebKit::AssistedNodeInformation::AssistedNodeInformation):
+        * UIProcess/API/Cocoa/WKWebViewInternal.h:
+        * UIProcess/ios/WKContentView.h:
+        * UIProcess/ios/WKContentView.mm:
+        (-[WKContentView _scrollToRect:withOrigin:minimumScrollDistance:]):
+        * UIProcess/ios/WKContentViewInteraction.mm:
+        (-[WKContentView _displayFormNodeInputView]):
+        (-[WKContentView _startAssistingNode:]):
+        * WebProcess/WebPage/ios/WebPageIOS.mm:
+        (WebKit::WebPage::getAssistedNodeInformation):
+
 2014-03-03  Sam Weinig  <s...@webkit.org>
 
         Fix ASSERT and leaks introduced in recent "Support IOS Accessibility in WK2" patch

Modified: trunk/Source/WebKit2/Shared/AssistedNodeInformation.cpp (165021 => 165022)


--- trunk/Source/WebKit2/Shared/AssistedNodeInformation.cpp	2014-03-04 00:49:19 UTC (rev 165021)
+++ trunk/Source/WebKit2/Shared/AssistedNodeInformation.cpp	2014-03-04 01:00:00 UTC (rev 165022)
@@ -64,6 +64,8 @@
 void AssistedNodeInformation::encode(IPC::ArgumentEncoder& encoder) const
 {
     encoder << elementRect;
+    encoder << minimumScaleFactor;
+    encoder << maximumScaleFactor;
     encoder << hasNextNode;
     encoder << hasPreviousNode;
     encoder << isAutocorrect;
@@ -84,6 +86,12 @@
     if (!decoder.decode(result.elementRect))
         return false;
 
+    if (!decoder.decode(result.minimumScaleFactor))
+        return false;
+
+    if (!decoder.decode(result.maximumScaleFactor))
+        return false;
+
     if (!decoder.decode(result.hasNextNode))
         return false;
 

Modified: trunk/Source/WebKit2/Shared/AssistedNodeInformation.h (165021 => 165022)


--- trunk/Source/WebKit2/Shared/AssistedNodeInformation.h	2014-03-04 00:49:19 UTC (rev 165021)
+++ trunk/Source/WebKit2/Shared/AssistedNodeInformation.h	2014-03-04 01:00:00 UTC (rev 165022)
@@ -93,7 +93,9 @@
 
 struct AssistedNodeInformation {
     AssistedNodeInformation()
-        : hasNextNode(false)
+        : minimumScaleFactor(-INFINITY)
+        , maximumScaleFactor(INFINITY)
+        , hasNextNode(false)
         , hasPreviousNode(false)
         , isAutocorrect(false)
         , isMultiSelect(false)
@@ -106,6 +108,8 @@
     }
 
     WebCore::IntRect elementRect;
+    double minimumScaleFactor;
+    double maximumScaleFactor;
     bool hasNextNode;
     bool hasPreviousNode;
     bool isAutocorrect;

Modified: trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebViewInternal.h (165021 => 165022)


--- trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebViewInternal.h	2014-03-04 00:49:19 UTC (rev 165021)
+++ trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebViewInternal.h	2014-03-04 01:00:00 UTC (rev 165022)
@@ -59,6 +59,7 @@
 
 - (RetainPtr<CGImageRef>)_takeViewSnapshot;
 
+- (BOOL)_scrollToRect:(WebCore::FloatRect)targetRect origin:(WebCore::FloatPoint)origin minimumScrollDistance:(float)minimumScrollDistance;
 - (BOOL)_zoomToRect:(WebCore::FloatRect)targetRect withOrigin:(WebCore::FloatPoint)origin fitEntireRect:(BOOL)fitEntireRect minimumScale:(double)minimumScale maximumScale:(double)maximumScale minimumScrollDistance:(float)minimumScrollDistance;
 - (void)_zoomOutWithOrigin:(WebCore::FloatPoint)origin;
 #endif

Modified: trunk/Source/WebKit2/UIProcess/ios/WKContentView.h (165021 => 165022)


--- trunk/Source/WebKit2/UIProcess/ios/WKContentView.h	2014-03-04 00:49:19 UTC (rev 165021)
+++ trunk/Source/WebKit2/UIProcess/ios/WKContentView.h	2014-03-04 01:00:00 UTC (rev 165022)
@@ -79,6 +79,7 @@
 - (RetainPtr<CGImageRef>)_takeViewSnapshot;
 - (void)_setAccessibilityWebProcessToken:(NSData *)data;
 
+- (BOOL)_scrollToRect:(CGRect)targetRect withOrigin:(CGPoint)origin minimumScrollDistance:(CGFloat)minimumScrollDistance;
 - (BOOL)_zoomToRect:(CGRect)targetRect withOrigin:(CGPoint)origin fitEntireRect:(BOOL)fitEntireRect minimumScale:(double)minimumScale maximumScale:(double)maximumScale minimumScrollDistance:(CGFloat)minimumScrollDistance;
 - (void)_zoomOutWithOrigin:(CGPoint)origin;
 

Modified: trunk/Source/WebKit2/UIProcess/ios/WKContentView.mm (165021 => 165022)


--- trunk/Source/WebKit2/UIProcess/ios/WKContentView.mm	2014-03-04 00:49:19 UTC (rev 165021)
+++ trunk/Source/WebKit2/UIProcess/ios/WKContentView.mm	2014-03-04 01:00:00 UTC (rev 165022)
@@ -306,6 +306,11 @@
     return [_webView _takeViewSnapshot];
 }
 
+- (BOOL)_scrollToRect:(CGRect)targetRect withOrigin:(CGPoint)origin minimumScrollDistance:(CGFloat)minimumScrollDistance
+{
+    return [_webView _scrollToRect:targetRect origin:origin minimumScrollDistance:minimumScrollDistance];
+}
+
 - (BOOL)_zoomToRect:(CGRect)targetRect withOrigin:(CGPoint)origin fitEntireRect:(BOOL)fitEntireRect minimumScale:(double)minimumScale maximumScale:(double)maximumScale minimumScrollDistance:(CGFloat)minimumScrollDistance
 {
     return [_webView _zoomToRect:targetRect withOrigin:origin fitEntireRect:fitEntireRect minimumScale:minimumScale maximumScale:maximumScale minimumScrollDistance:minimumScrollDistance];

Modified: trunk/Source/WebKit2/UIProcess/ios/WKContentViewInteraction.mm (165021 => 165022)


--- trunk/Source/WebKit2/UIProcess/ios/WKContentViewInteraction.mm	2014-03-04 00:49:19 UTC (rev 165021)
+++ trunk/Source/WebKit2/UIProcess/ios/WKContentViewInteraction.mm	2014-03-04 01:00:00 UTC (rev 165022)
@@ -406,7 +406,15 @@
 
 - (void)_displayFormNodeInputView
 {
-    // FIXME: This is the place where we should zoom to node
+    if (UICurrentUserInterfaceIdiomIsPad())
+        [self _scrollToRect:_assistedNodeInformation.elementRect withOrigin:_page->editorState().caretRectAtStart.location() minimumScrollDistance:0];
+    else
+        [self _zoomToRect:_assistedNodeInformation.elementRect
+               withOrigin:_page->editorState().caretRectAtStart.location()
+            fitEntireRect:YES minimumScale:_assistedNodeInformation.minimumScaleFactor
+             maximumScale:_assistedNodeInformation.maximumScaleFactor
+    minimumScrollDistance:0];
+
     [self _updateAccessory];
 }
 
@@ -1850,7 +1858,8 @@
             break;
     }
     [self reloadInputViews];
-    [self _updateAccessory];
+    [self _displayFormNodeInputView];
+
     // _inputPeripheral has been initialized in inputView called by reloadInputViews.
     [_inputPeripheral beginEditing];
 }

Modified: trunk/Source/WebKit2/WebProcess/WebPage/ios/WebPageIOS.mm (165021 => 165022)


--- trunk/Source/WebKit2/WebProcess/WebPage/ios/WebPageIOS.mm	2014-03-04 00:49:19 UTC (rev 165021)
+++ trunk/Source/WebKit2/WebProcess/WebPage/ios/WebPageIOS.mm	2014-03-04 01:00:00 UTC (rev 165022)
@@ -1583,6 +1583,8 @@
 void WebPage::getAssistedNodeInformation(AssistedNodeInformation& information)
 {
     information.elementRect = m_page->focusController().focusedOrMainFrame().view()->contentsToRootView(m_assistedNode->renderer()->absoluteBoundingBoxRect());
+    information.minimumScaleFactor = m_viewportConfiguration.minimumScale();
+    information.maximumScaleFactor = m_viewportConfiguration.maximumScale();
     information.hasNextNode = hasFocusableNode(m_assistedNode.get(), m_page.get(), true);
     information.hasPreviousNode = hasFocusableNode(m_assistedNode.get(), m_page.get(), false);
 
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to