From: SangYong Park Date: Tue, 23 Apr 2013 20:13:23 +0000 (+0900) Subject: Refine focus ring repainting code when web contents was changed. X-Git-Tag: submit/tizen_2.1/20130514.045449~66 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=c8bdeda433cfa1f863fde9b3d502fe79bfd6ea34;p=platform%2Fframework%2Fweb%2Fwebkit-efl.git Refine focus ring repainting code when web contents was changed. [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 --- diff --git a/Source/WebKit2/UIProcess/API/efl/EwkViewImpl.cpp b/Source/WebKit2/UIProcess/API/efl/EwkViewImpl.cpp index 650d8fd..abd00da 100755 --- a/Source/WebKit2/UIProcess/API/efl/EwkViewImpl.cpp +++ b/Source/WebKit2/UIProcess/API/efl/EwkViewImpl.cpp @@ -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) diff --git a/Source/WebKit2/UIProcess/API/efl/EwkViewImpl.h b/Source/WebKit2/UIProcess/API/efl/EwkViewImpl.h index 02cd6cb..86c7f96 100755 --- a/Source/WebKit2/UIProcess/API/efl/EwkViewImpl.h +++ b/Source/WebKit2/UIProcess/API/efl/EwkViewImpl.h @@ -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. diff --git a/Source/WebKit2/UIProcess/API/efl/PageClientImpl.cpp b/Source/WebKit2/UIProcess/API/efl/PageClientImpl.cpp index 7c9b1f5..ef68737 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; @@ -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() diff --git a/Source/WebKit2/UIProcess/API/efl/ewk_view.cpp b/Source/WebKit2/UIProcess/API/efl/ewk_view.cpp index f1e6bcb..ee464ad 100644 --- a/Source/WebKit2/UIProcess/API/efl/ewk_view.cpp +++ b/Source/WebKit2/UIProcess/API/efl/ewk_view.cpp @@ -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 diff --git a/Source/WebKit2/UIProcess/efl/InputMethodContextEfl.cpp b/Source/WebKit2/UIProcess/efl/InputMethodContextEfl.cpp index 9cfdc63..4df0caf 100755 --- a/Source/WebKit2/UIProcess/efl/InputMethodContextEfl.cpp +++ b/Source/WebKit2/UIProcess/efl/InputMethodContextEfl.cpp @@ -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) diff --git a/Source/WebKit2/WebProcess/WebPage/DrawingAreaImpl.cpp b/Source/WebKit2/WebProcess/WebPage/DrawingAreaImpl.cpp old mode 100644 new mode 100755 index 204effd..38f813a --- a/Source/WebKit2/WebProcess/WebPage/DrawingAreaImpl.cpp +++ b/Source/WebKit2/WebProcess/WebPage/DrawingAreaImpl.cpp @@ -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()); diff --git a/Source/WebKit2/WebProcess/WebPage/WebPage.h b/Source/WebKit2/WebProcess/WebPage/WebPage.h old mode 100644 new mode 100755 index 6d8d14d..b9bbb04 --- a/Source/WebKit2/WebProcess/WebPage/WebPage.h +++ b/Source/WebKit2/WebProcess/WebPage/WebPage.h @@ -777,6 +777,10 @@ public: void useSettingsFont(); #endif +#if OS(TIZEN) + void didChangeContents(const WebCore::IntRect&); +#endif + private: WebPage(uint64_t pageID, const WebPageCreationParameters&); diff --git a/Source/WebKit2/WebProcess/WebPage/efl/WebPageEfl.cpp b/Source/WebKit2/WebProcess/WebPage/efl/WebPageEfl.cpp old mode 100644 new mode 100755 index fda5383..362b65b --- a/Source/WebKit2/WebProcess/WebPage/efl/WebPageEfl.cpp +++ b/Source/WebKit2/WebProcess/WebPage/efl/WebPageEfl.cpp @@ -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(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) @@ -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 diff --git a/Source/WebKit2/WebProcess/WebPage/efl/tizen/ScreenReader.cpp b/Source/WebKit2/WebProcess/WebPage/efl/tizen/ScreenReader.cpp old mode 100644 new mode 100755 index 67b8ec3..c4cb741 --- 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 old mode 100644 new mode 100755 index b1f30cc..ea19cb0 --- 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;