From 78db316ad8b17fd2d5829332f18e521bd0a7447c Mon Sep 17 00:00:00 2001 From: SangYong Park Date: Fri, 3 May 2013 08:56:43 +0900 Subject: [PATCH] Revert "Revert "Refine focus ring repainting code when web contents was changed."" This reverts commit 905629c3334b573592d3410caeef8c94d12eed06. Change-Id: I591f1c33084348ab0d92eaea2baed4b1468ad5ee --- Source/WebKit2/UIProcess/API/efl/EwkViewImpl.cpp | 10 ++++++ Source/WebKit2/UIProcess/API/efl/EwkViewImpl.h | 1 + .../WebKit2/UIProcess/API/efl/PageClientImpl.cpp | 31 +++-------------- Source/WebKit2/UIProcess/API/efl/ewk_view.cpp | 3 -- .../WebKit2/WebProcess/WebPage/DrawingAreaImpl.cpp | 0 .../WebKit2/WebProcess/WebPage/efl/WebPageEfl.cpp | 40 +++++++++++++--------- .../WebProcess/WebPage/efl/tizen/ScreenReader.cpp | 1 + .../WebProcess/WebPage/efl/tizen/ScreenReader.h | 4 +++ 8 files changed, 43 insertions(+), 47 deletions(-) mode change 100644 => 100755 Source/WebKit2/WebProcess/WebPage/DrawingAreaImpl.cpp diff --git a/Source/WebKit2/UIProcess/API/efl/EwkViewImpl.cpp b/Source/WebKit2/UIProcess/API/efl/EwkViewImpl.cpp index e6d61d9..371af74 100755 --- a/Source/WebKit2/UIProcess/API/efl/EwkViewImpl.cpp +++ b/Source/WebKit2/UIProcess/API/efl/EwkViewImpl.cpp @@ -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) diff --git a/Source/WebKit2/UIProcess/API/efl/EwkViewImpl.h b/Source/WebKit2/UIProcess/API/efl/EwkViewImpl.h index 7deea89..2b1e9bf 100755 --- a/Source/WebKit2/UIProcess/API/efl/EwkViewImpl.h +++ b/Source/WebKit2/UIProcess/API/efl/EwkViewImpl.h @@ -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. diff --git a/Source/WebKit2/UIProcess/API/efl/PageClientImpl.cpp b/Source/WebKit2/UIProcess/API/efl/PageClientImpl.cpp index b9d11a1..3c577ed 100755 --- a/Source/WebKit2/UIProcess/API/efl/PageClientImpl.cpp +++ b/Source/WebKit2/UIProcess/API/efl/PageClientImpl.cpp @@ -74,10 +74,6 @@ #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() diff --git a/Source/WebKit2/UIProcess/API/efl/ewk_view.cpp b/Source/WebKit2/UIProcess/API/efl/ewk_view.cpp index 2e410b9..82f34e6 100755 --- a/Source/WebKit2/UIProcess/API/efl/ewk_view.cpp +++ b/Source/WebKit2/UIProcess/API/efl/ewk_view.cpp @@ -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 diff --git a/Source/WebKit2/WebProcess/WebPage/DrawingAreaImpl.cpp b/Source/WebKit2/WebProcess/WebPage/DrawingAreaImpl.cpp old mode 100644 new mode 100755 diff --git a/Source/WebKit2/WebProcess/WebPage/efl/WebPageEfl.cpp b/Source/WebKit2/WebProcess/WebPage/efl/WebPageEfl.cpp index 3d7211e..1111865 100755 --- a/Source/WebKit2/WebProcess/WebPage/efl/WebPageEfl.cpp +++ b/Source/WebKit2/WebProcess/WebPage/efl/WebPageEfl.cpp @@ -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(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(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) diff --git a/Source/WebKit2/WebProcess/WebPage/efl/tizen/ScreenReader.cpp b/Source/WebKit2/WebProcess/WebPage/efl/tizen/ScreenReader.cpp index ac1ba95..d168974 100755 --- a/Source/WebKit2/WebProcess/WebPage/efl/tizen/ScreenReader.cpp +++ b/Source/WebKit2/WebProcess/WebPage/efl/tizen/ScreenReader.cpp @@ -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())); } diff --git a/Source/WebKit2/WebProcess/WebPage/efl/tizen/ScreenReader.h b/Source/WebKit2/WebProcess/WebPage/efl/tizen/ScreenReader.h index 41bf628..c6d45ed 100755 --- a/Source/WebKit2/WebProcess/WebPage/efl/tizen/ScreenReader.h +++ b/Source/WebKit2/WebProcess/WebPage/efl/tizen/ScreenReader.h @@ -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; -- 2.7.4