webengine/osswebengine/WebKit/s60/webview/WebFepTextEditor.cpp
changeset 8 7c90e6132015
parent 0 dd21522fd290
child 16 a359256acfc6
--- 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<HTMLGenericFormElement*>(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;
 }
 
 // -----------------------------------------------------------------------------