Revert "Revert "Refine focus ring repainting code when web contents was changed.""
authorSangYong Park <sy302.park@samsung.com>
Thu, 2 May 2013 23:56:43 +0000 (08:56 +0900)
committerGerrit Code Review <gerrit@gerrit.vlan144.tizendev.org>
Fri, 2 Aug 2013 07:23:22 +0000 (07:23 +0000)
This reverts commit 905629c3334b573592d3410caeef8c94d12eed06.

Change-Id: I591f1c33084348ab0d92eaea2baed4b1468ad5ee

Source/WebKit2/UIProcess/API/efl/EwkViewImpl.cpp
Source/WebKit2/UIProcess/API/efl/EwkViewImpl.h
Source/WebKit2/UIProcess/API/efl/PageClientImpl.cpp
Source/WebKit2/UIProcess/API/efl/ewk_view.cpp
Source/WebKit2/WebProcess/WebPage/DrawingAreaImpl.cpp [changed mode: 0644->0755]
Source/WebKit2/WebProcess/WebPage/efl/WebPageEfl.cpp
Source/WebKit2/WebProcess/WebPage/efl/tizen/ScreenReader.cpp
Source/WebKit2/WebProcess/WebPage/efl/tizen/ScreenReader.h

index e6d61d9..371af74 100755 (executable)
@@ -1405,4 +1405,14 @@ void EwkViewImpl::setDoubleTapEnabled(bool enabled)
 }
 #endif
 
+void EwkViewImpl::didChangeScrollAndScale(const WebCore::IntPoint& previousScrollPosition, float previousScale)
+{
+#if ENABLE(TIZEN_WEBKIT2_FOCUS_RING)
+    if (!focusRing)
+        return;
+
+    if (!focusRing->rect().isEmpty())
+        focusRing->updateScrollAndScale(previousScrollPosition, previousScale);
+#endif
+}
 #endif //#if OS(TIZEN)
index 7deea89..2b1e9bf 100755 (executable)
@@ -323,6 +323,7 @@ public:
     void setDoubleTapEnabled(bool);
 #endif
 
+    void didChangeScrollAndScale(const WebCore::IntPoint&, float);
 #endif // #if OS(TIZEN)
 
     // FIXME: Make members private for encapsulation.
index b9d11a1..3c577ed 100755 (executable)
 #include "ewk_context_private.h"
 #endif
 
-#if ENABLE(TIZEN_SCREEN_READER)
-#include "ScreenReaderProxy.h"
-#endif
-
 using namespace WebCore;
 using namespace std;
 
@@ -330,11 +326,6 @@ void PageClientImpl::setViewNeedsDisplay(const WebCore::IntRect& rect)
 #else
     m_viewImpl->redrawRegion(rect);
 #endif
-
-#if ENABLE(TIZEN_SCREEN_READER)
-    if (rect.intersects(ewkViewGetFocusRing(m_viewImpl->view())->rect()))
-        m_viewImpl->page()->recalcScreenReaderFocusRect();
-#endif
 }
 
 void PageClientImpl::displayView()
@@ -891,7 +882,7 @@ IntRect PageClientImpl::adjustVisibleContentRect(IntRect visibleContentRect, flo
 
 void PageClientImpl::setVisibleContentRect(const IntRect& newRect, float newScale, const FloatPoint& trajectory)
 {
-#if ENABLE(TIZEN_SCREEN_READER)
+#if OS(TIZEN)
     IntPoint previousScrollPosition(scrollPosition());
     float previousScale = m_scaleFactor;
 #endif
@@ -930,10 +921,9 @@ void PageClientImpl::setVisibleContentRect(const IntRect& newRect, float newScal
 #endif
     displayViewport();
 
-#if ENABLE(TIZEN_SCREEN_READER)
-    if (ScreenReaderProxy::screenReader().isActive(m_viewImpl)
-        && (scrollPosition() != previousScrollPosition || m_scaleFactor != previousScale))
-        ewkViewGetFocusRing(m_viewImpl->view())->updateScrollAndScale(previousScrollPosition, previousScale);
+#if OS(TIZEN)
+    if (scrollPosition() != previousScrollPosition || m_scaleFactor != previousScale)
+        m_viewImpl->didChangeScrollAndScale(previousScrollPosition, previousScale);
 #endif
 
 #if ENABLE(TIZEN_WEBKIT2_TEXT_SELECTION)
@@ -949,10 +939,6 @@ void PageClientImpl::displayViewport()
 #if ENABLE(TIZEN_WEBKIT2_TILED_SCROLLBAR)
     updateScrollbar();
 #endif
-
-#if ENABLE(TIZEN_SCREEN_READER)
-    m_viewImpl->page()->recalcScreenReaderFocusRect();
-#endif
 }
 
 void PageClientImpl::drawContents()
@@ -1521,11 +1507,6 @@ void PageClientEvasGL::setViewNeedsDisplay(const WebCore::IntRect& rect)
 #endif
     drawContents();
     m_viewImpl->redrawRegion(rect);
-
-#if ENABLE(TIZEN_SCREEN_READER)
-    if (rect.intersects(ewkViewGetFocusRing(m_viewImpl->view())->rect()))
-        m_viewImpl->page()->recalcScreenReaderFocusRect();
-#endif
 }
 
 void PageClientEvasGL::displayViewport()
@@ -1542,10 +1523,6 @@ void PageClientEvasGL::displayViewport()
 #if ENABLE(TIZEN_WEBKIT2_TILED_SCROLLBAR)
     updateScrollbar();
 #endif
-
-#if ENABLE(TIZEN_SCREEN_READER)
-    m_viewImpl->page()->recalcScreenReaderFocusRect();
-#endif
 }
 
 void PageClientEvasGL::drawContents()
index 2e410b9..82f34e6 100755 (executable)
@@ -1004,9 +1004,6 @@ static void _ewk_view_smart_calculate(Evas_Object* ewkView)
 #if ENABLE(TIZEN_WEBKIT2_TILED_SCROLLBAR)
         impl->pageClient->frameRectChanged();
 #endif
-#if ENABLE(TIZEN_SCREEN_READER)
-        impl->pageProxy->recalcScreenReaderFocusRect();
-#endif
 #if ENABLE(TIZEN_WEBKIT2_TEXT_SELECTION)
         impl->pageClient->updateTextSelectionHandlesAndContextMenu(true);
 #endif
index 3d7211e..1111865 100755 (executable)
@@ -1723,15 +1723,22 @@ void WebPage::getLinkMagnifierRect(const IntPoint& position, const IntSize& size
 #endif
 
 #if ENABLE(TIZEN_SCREEN_READER)
-static void sendScreenReaderFocusRect(WebPage* page, Node* node)
+static void sendScreenReaderFocusRect(WebPage* page, ScreenReader* screenReader)
 {
-    bool isImage = false;
-    if (node->isElementNode()) {
-        Element* element = static_cast<Element*>(node);
-        isImage = !element->getAttribute(element->imageSourceAttributeName()).isEmpty();
+    Node* node = screenReader->getFocusedNode();
+    IntRect rect;
+
+    if (node) {
+        bool isImage = false;
+        if (node->isElementNode()) {
+            Element* element = static_cast<Element*>(node);
+            isImage = !element->getAttribute(element->imageSourceAttributeName()).isEmpty();
+        }
+        rect = getNodeRect(node, node, isImage);
     }
 
-    page->send(Messages::WebPageProxy::DidScreenReaderFocusRectChanged(getNodeRect(node, node, isImage)));
+    screenReader->setFocusedRect(rect);
+    page->send(Messages::WebPageProxy::DidScreenReaderFocusRectChanged(rect));
 }
 
 void WebPage::moveScreenReaderFocus(bool forward, bool& result)
@@ -1739,14 +1746,8 @@ void WebPage::moveScreenReaderFocus(bool forward, bool& result)
     if (!m_screenReader)
         m_screenReader = ScreenReader::create(this);
 
-    if (!m_screenReader->moveFocus(forward)) {
-        result = false;
-        send(Messages::WebPageProxy::DidScreenReaderFocusRectChanged(IntRect()));
-        return;
-    } else {
-        result = true;
-        sendScreenReaderFocusRect(this, m_screenReader->getFocusedNode());
-    }
+    result = m_screenReader->moveFocus(forward);
+    sendScreenReaderFocusRect(this, m_screenReader.get());
 }
 
 void WebPage::moveScreenReaderFocusByPoint(const IntPoint& point)
@@ -1757,7 +1758,7 @@ void WebPage::moveScreenReaderFocusByPoint(const IntPoint& point)
     if (!m_screenReader->moveFocus(point))
         return;
 
-    sendScreenReaderFocusRect(this, m_screenReader->getFocusedNode());
+    sendScreenReaderFocusRect(this, m_screenReader.get());
 }
 
 void WebPage::clearScreenReaderFocus()
@@ -1813,7 +1814,7 @@ void WebPage::recalcScreenReaderFocusRect()
     if (!m_screenReader || !m_screenReader->getFocusedNode())
         return;
 
-    sendScreenReaderFocusRect(this, m_screenReader->getFocusedNode());
+    sendScreenReaderFocusRect(this, m_screenReader.get());
 }
 
 void WebPage::updateScreenReaderFocus(RenderObject* object)
@@ -1826,7 +1827,7 @@ void WebPage::updateScreenReaderFocus(RenderObject* object)
     else if (!m_screenReader->rendererWillBeDestroyed(object))
         return;
 
-    send(Messages::WebPageProxy::DidScreenReaderFocusRectChanged(IntRect()));
+    sendScreenReaderFocusRect(this, m_screenReader.get());
 }
 
 void WebPage::clearScreenReader()
@@ -1960,6 +1961,11 @@ void WebPage::didChangeContents(const IntRect& rect)
         }
     }
 #endif
+
+#if ENABLE(TIZEN_SCREEN_READER)
+    if (m_screenReader && rect.intersects(m_screenReader->focusedRect()))
+        recalcScreenReaderFocusRect();
+#endif
 }
 #endif // #if OS(TIZEN)
 
index ac1ba95..d168974 100755 (executable)
@@ -579,6 +579,7 @@ bool ScreenReader::rendererWillBeDestroyed(RenderObject* object)
 void ScreenReader::clearFocus()
 {
     m_focusedObject = 0;
+    m_focusedRect = IntRect();
     m_hasFocus = false;
     m_page->send(Messages::WebPageProxy::DidScreenReaderTextChanged(emptyString()));
 }
index 41bf628..c6d45ed 100755 (executable)
@@ -57,6 +57,9 @@ public:
     bool rendererWillBeDestroyed(WebCore::RenderObject*);
     void clearFocus();
 
+    const WebCore::IntRect& focusedRect() const { return m_focusedRect; }
+    void setFocusedRect(const WebCore::IntRect& rect) { m_focusedRect = rect; }
+
 private:
     ScreenReader(WebPage*);
 
@@ -70,6 +73,7 @@ private:
 
     WebPage* m_page;
     WebCore::RenderObject* m_focusedObject;
+    WebCore::IntRect m_focusedRect;
     bool m_hasFocus;
     bool m_isForward;