Enable input field zoom on user scalable contents even caret is visible
authorChanghyup Jwa <ch.jwa@samsung.com>
Mon, 10 Jun 2013 08:16:53 +0000 (17:16 +0900)
committerGerrit Code Review <gerrit@gerrit.vlan144.tizendev.org>
Thu, 20 Jun 2013 13:42:59 +0000 (13:42 +0000)
[Title] Enable input field zoom on user scalable contents even caret is visible
[Issue#] N_SE-39317
[Problem] Caret position is placed right side on webview
[Cause] Scroll position is not updated on input field zooming if caret is visible
[Solution] Update scroll position if content is user scalable

Change-Id: I705c6cdb2ca6b7ee184300ad134c4b30f5460e50

Source/WebKit2/UIProcess/API/efl/PageClientImpl.h
Source/WebKit2/UIProcess/API/efl/ewk_view.cpp

index a248428..99c2b6d 100755 (executable)
@@ -51,6 +51,7 @@
 #if ENABLE(TIZEN_WEBKIT2_FORM_DATABASE)
 #include "FormDataCandidate.h"
 #endif
+using std::numeric_limits;
 #endif // #if OS(TIZEN)
 
 class EwkViewImpl;
@@ -106,6 +107,7 @@ public:
         WebCore::IntSize layoutSize;
     };
 
+    bool userScalable() { return fabs(m_viewportConstraints.minimumScale - m_viewportConstraints.maximumScale) > numeric_limits<float>::epsilon(); }
     ViewportConstraints viewportConstraints() { return m_viewportConstraints; }
     ViewportConstraints computeViewportConstraints(const WebCore::ViewportAttributes&);
     double adjustScaleWithViewport(double);
index 1afe539..62ff9e6 100644 (file)
@@ -2511,8 +2511,8 @@ bool ewk_view_focused_node_adjust(Evas_Object* ewkView, Eina_Bool adjustForExter
 
     IntRect visibleRect = impl->pageClient->visibleContentRect();
     IntPoint scrollPosition = visibleRect.location();
-    // Do not adjust scroll position if selection rect (caret) is visible after scaling.
-    if (!visibleRect.contains(selectionRect)) {
+    // Do not adjust scroll position if content is userscalable or selection rect (caret) is visible after scaling
+    if (impl->pageClient->userScalable() || !visibleRect.contains(selectionRect)) {
         // set paddings
         scrollPosition = IntPoint(selectionRect.x() - visibleRect.width() / 3, selectionRect.y() - visibleRect.height() / 3);
         // If both input field's position x and selection rect can be displayed together,