diff -r dd21522fd290 -r 7c90e6132015 webengine/osswebengine/WebKit/s60/webview/WebFepTextEditor.cpp --- a/webengine/osswebengine/WebKit/s60/webview/WebFepTextEditor.cpp Mon Mar 30 12:54:55 2009 +0300 +++ b/webengine/osswebengine/WebKit/s60/webview/WebFepTextEditor.cpp Fri May 08 08:25:06 2009 +0300 @@ -19,7 +19,10 @@ #include "config.h" #include "../../bidi.h" - +#include "StaticObjectsContainer.h" +#include "AtomicString.h" +#include "PlatformFontCache.h" +#include "BrCtl.h" #include "WebFepTextEditor.h" #include "WebEditorClient.h" #include "WebTextFormatMask.h" @@ -88,6 +91,7 @@ delete m_state; delete m_inlineEditText; delete m_textFormatMask; + delete m_ExtendedInputCapabilities; } // ----------------------------------------------------------------------------- @@ -495,11 +499,50 @@ // // // ----------------------------------------------------------------------------- -void CWebFepTextEditor::GetScreenCoordinatesForFepL(TPoint& /*aLeftSideOfBaseLine*/, - TInt& /*aHeight*/, - TInt& /*aAscent*/, - TInt /*aDocumentPosition*/) const -{ +void CWebFepTextEditor::GetScreenCoordinatesForFepL(TPoint& aLeftSideOfBaseLine, + TInt& aHeight, + TInt& aAscent, + TInt aDocumentPosition) const +{ +Frame* frame = m_webView->page()->focusController()->focusedOrMainFrame(); +if (frame && + frame->document() && + frame->document()->focusedNode()){ + if ( frame->document()->focusedNode()->hasTagName(HTMLNames::inputTag) || + frame->document()->focusedNode()->hasTagName(HTMLNames::textareaTag)){ + HTMLGenericFormElement* ie = static_cast(frame->document()->focusedNode()); + SelectionController* sc = frame->selectionController(); + int xPos(0); + int yPos(0); + if ( sc ){ + IntRect rect = sc->caretRect(); + xPos = rect.x(); + yPos = rect.y(); + yPos += m_webView->brCtl()->PositionRelativeToScreen().iY; + Node* editNode = sc->focusNode(); + String str; + if ( editNode && + editNode->isTextNode() ) { + WebCore::Text* aText = (WebCore::Text*)editNode; + str = aText->data(); + aDocumentPosition = aText->length(); + TInt position = aDocumentPosition - ( str.reverseFind(KBlankDesC(), aDocumentPosition )+1); + String word(str); + if( position > 0 ){ + word = str.left( position ); + } + RenderStyle* s = frame->document()->focusedNode()->renderStyle(); + PlatformFontCache* cache = StaticObjectsContainer::instance()->fontCache(); + CFont* sFont = cache->zoomedFont( s->fontDescription(), cache->fontZoomFactor()); + TInt sizePix = sFont->MeasureText( word.des() ); + xPos -= sizePix; + } + } + aLeftSideOfBaseLine.SetXY( xPos,yPos ); + } + } + aAscent = 0; + aHeight = 0; } // -----------------------------------------------------------------------------