Refine focus ring repainting code when web contents was changed.
authorSangYong Park <sy302.park@samsung.com>
Tue, 23 Apr 2013 20:13:23 +0000 (05:13 +0900)
committerGerrit Code Review <gerrit2@kim11>
Thu, 2 May 2013 08:40:19 +0000 (17:40 +0900)
[Title] Refine focus ring repainting code when web contents was changed.
[Issue#] N/A
[Problem] The code was confused.
[Cause] The code has been written in several places.
[Solution] Refine code.

Change-Id: Ifc735ea360a47063effb5295ca7b8e95644c7253

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/UIProcess/efl/InputMethodContextEfl.cpp
Source/WebKit2/WebProcess/WebPage/DrawingAreaImpl.cpp [changed mode: 0644->0755]
Source/WebKit2/WebProcess/WebPage/WebPage.h [changed mode: 0644->0755]
Source/WebKit2/WebProcess/WebPage/efl/WebPageEfl.cpp [changed mode: 0644->0755]
Source/WebKit2/WebProcess/WebPage/efl/tizen/ScreenReader.cpp [changed mode: 0644->0755]
Source/WebKit2/WebProcess/WebPage/efl/tizen/ScreenReader.h [changed mode: 0644->0755]

index 650d8fd..abd00da 100755 (executable)
@@ -1395,4 +1395,15 @@ void EwkViewImpl::feedTouchEventsByType(Ewk_Touch_Event_Type type)
     feedTouchEvents(type);
 }
 #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 02cd6cb..86c7f96 100755 (executable)
@@ -319,6 +319,8 @@ public:
 #if ENABLE(TOUCH_EVENTS) && ENABLE(TIZEN_GESTURE)
     void feedTouchEventsByType(Ewk_Touch_Event_Type);
 #endif
+
+    void didChangeScrollAndScale(const WebCore::IntPoint&, float);
 #endif
 
     // FIXME: Make members private for encapsulation.
index 7c9b1f5..ef68737 100755 (executable)
 #include "ewk_context_private.h"
 #endif
 
-#if ENABLE(TIZEN_SCREEN_READER)
-#include "ScreenReaderProxy.h"
-#endif
-
 using namespace WebCore;
 using namespace std;
 
@@ -301,11 +297,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()
@@ -820,7 +811,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
@@ -859,10 +850,9 @@ void PageClientImpl::setVisibleContentRect(const IntRect& newRect, float newScal
 #endif
     displayViewport();
 
-#if ENABLE(TIZEN_SCREEN_READER)
-    if (ScreenReaderProxy::screenReader().isEnabled()
-        && (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)
@@ -878,10 +868,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()
@@ -1473,11 +1459,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()
@@ -1494,10 +1475,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 f1e6bcb..ee464ad 100644 (file)
@@ -978,9 +978,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 9cfdc63..4df0caf 100755 (executable)
@@ -325,7 +325,7 @@ void InputMethodContextEfl::handleKeyDownEvent(const Evas_Event_Key_Down* downEv
 void InputMethodContextEfl::updateTextInputState()
 {
     const EditorState& editor = m_viewImpl->page()->editorState();
-    if (editor.shouldIgnoreCompositionSelectionChange)
+    if (editor.shouldIgnoreCompositionSelectionChange || editor.updateEditorRectOnly)
         return;
 
     if (editor.isContentEditable && m_useInputMethod)
old mode 100644 (file)
new mode 100755 (executable)
index 204effd..38f813a
@@ -89,6 +89,10 @@ void DrawingAreaImpl::setNeedsDisplay(const IntRect& rect)
     if (dirtyRect.isEmpty())
         return;
 
+#if OS(TIZEN)
+    m_webPage->didChangeContents(dirtyRect);
+#endif
+
     if (m_layerTreeHost) {
         ASSERT(m_dirtyRegion.isEmpty());
 
@@ -108,6 +112,10 @@ void DrawingAreaImpl::scroll(const IntRect& scrollRect, const IntSize& scrollOff
     if (!m_isPaintingEnabled)
         return;
 
+#if OS(TIZEN)
+    m_webPage->didChangeContents(scrollRect);
+#endif
+
     if (m_layerTreeHost) {
         ASSERT(m_scrollRect.isEmpty());
         ASSERT(m_scrollOffset.isEmpty());
old mode 100644 (file)
new mode 100755 (executable)
index 6d8d14d..b9bbb04
@@ -777,6 +777,10 @@ public:
     void useSettingsFont();
 #endif
 
+#if OS(TIZEN)
+    void didChangeContents(const WebCore::IntRect&);
+#endif
+
 private:
     WebPage(uint64_t pageID, const WebPageCreationParameters&);
 
old mode 100644 (file)
new mode 100755 (executable)
index fda5383..362b65b
@@ -1543,15 +1543,22 @@ void WebPage::raiseTapEvent(const IntPoint& position, const IntPoint& globalPosi
     frame->eventHandler()->handleTouchEvent(platform(touchEndEvent));
 }
 
-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)
@@ -1559,14 +1566,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)
@@ -1577,7 +1578,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::recalcScreenReaderFocusRect()
@@ -1585,7 +1586,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)
@@ -1598,7 +1599,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()
@@ -1665,6 +1666,22 @@ void WebPage::useSettingsFont()
     frameView->forceLayout();
 }
 #endif
+
+void WebPage::didChangeContents(const IntRect& rect)
+{
+#if ENABLE(TIZEN_ISF_PORT)
+    if (m_editorState.isContentEditable && rect.intersects(m_editorState.editorRect)) {
+        m_editorState = editorState();
+        m_editorState.updateEditorRectOnly = true;
+        send(Messages::WebPageProxy::EditorStateChanged(m_editorState));
+    }
+#endif
+
+#if ENABLE(TIZEN_SCREEN_READER)
+    if (m_screenReader && rect.intersects(m_screenReader->focusedRect()))
+        recalcScreenReaderFocusRect();
+#endif
+}
 #endif // #if OS(TIZEN)
 
 } // namespace WebKit
old mode 100644 (file)
new mode 100755 (executable)
index 67b8ec3..c4cb741
@@ -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()));
 }
old mode 100644 (file)
new mode 100755 (executable)
index b1f30cc..ea19cb0
@@ -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;