uifw/EikStd/coctlsrc/EIKEDWIN.CPP
branchRCL_3
changeset 10 9f56a4e1b8ab
parent 9 aabf2c525e0f
child 15 08e69e956a8c
--- a/uifw/EikStd/coctlsrc/EIKEDWIN.CPP	Fri Mar 12 15:43:43 2010 +0200
+++ b/uifw/EikStd/coctlsrc/EIKEDWIN.CPP	Mon Mar 15 12:41:34 2010 +0200
@@ -572,7 +572,6 @@
     TRAPD(error,iEdwin.iText->UpdateFepInlineTextL(paragraphContainingStartPositionOfInlineTextHasChangedFormat,numberOfCharactersSuccessfullyDeleted,numberOfCharactersSuccessfullyInserted,iPositionOfInsertionPointInDocument,iPositionOfInlineTextInDocument+aPositionOfInsertionPointInInlineText,aNewInlineText));
     iLengthOfInlineText=numberOfCharactersSuccessfullyInserted;
     UpdateTextViewAfterChangeInInlineTextL(paragraphContainingStartPositionOfInlineTextHasChangedFormat,numberOfCharactersSuccessfullyDeleted,numberOfCharactersSuccessfullyInserted,error);
-    iEdwin.ReportEdwinEventL( MEikEdwinObserver::EEventTextUpdate );
     }
 
 void CEikEdwinFepSupport::SetInlineEditingCursorVisibilityL(TBool aCursorVisibility)
@@ -1042,6 +1041,7 @@
         iCenRep->Get(KAknFepClearDirection, iClearDirection);
         }
     iSmileyWrap = new ( ELeave ) CSmileyCustomWrap;
+    iSkinInstance = AknsUtils::SkinInstance();
     }
 
 void CEikEdwin::CEikEdwinExtension::CreateFormExtendedInterfaceProviderIfNeededL()
@@ -2772,7 +2772,10 @@
                 }
             Window().RequestPointerRepeatEvent(KPointerRepeatRate,rect);
             navigation = ETrue;
-            iEdwinExtension->iThumbPos = KErrNotFound;
+            if ( iLayout && !iLayout->IsFormattingBand() )
+                {
+                iEdwinExtension->iThumbPos = KErrNotFound;
+                }
             }
         else if (iEdwinInternalFlags&EDragDouble)
             {
@@ -3379,12 +3382,6 @@
         for (TInt ii=0;ii<count;ii++)
             (*iObserverArray)[ii]->HandleEdwinEventL(this,aEventType);
         }
-    if ( aEventType == MEikEdwinObserver::EEventScroll || 
-        aEventType == MEikEdwinObserver::EEventNavigation 
-        )
-        {
-        HandleScrollForSmileyL();        
-        }
     if ( aEventType == MEikEdwinObserver::EEventTextUpdate )
         {
         iEdwinExtension->iExtendedInputCapabilities->ReportEventL( 
@@ -5681,6 +5678,7 @@
             aVertModel.iThumbSpan = bottomPos - topPos;
             aVertModel.iScrollSpan = totalChars;        
             aVertModel.iThumbPosition = topPos;
+            iEdwinExtension->iThumbPos = topPos;
             }
         return;
         }
@@ -8259,8 +8257,8 @@
     return ( iEdwinExtension->iSmiley != NULL );
     }
 
-void CEikEdwin::DrawSmileyInTextL( CBitmapContext& aGc, CFont& aFont, 
-        const TDesC& aText, const TPoint& aPt )
+void CEikEdwin::DrawSmileyInTextL( RRegion& rgn, const TRect& aDrawRect, 
+    CBitmapContext& aGc, CFont& aFont, const TDesC& aText, const TPoint& aPt )
     {    
     TRect viewRect( AdjustedViewRect() );
     TInt topY( aPt.iY - aFont.AscentInPixels() );
@@ -8290,8 +8288,11 @@
             if ( CSmileyManager::IsSmileyCode( text[i] ) )
                 {
                 TInt x( pt.iX + aFont.TextWidthInPixels( text.Left( i ) ) );
-                TRect rect( x, topY, x + smileyWidth, bottomY );
-                iEdwinExtension->iSmiley->DrawIconL( aGc, rect, i + pos );
+                TRect clipRect( x, aDrawRect.iTl.iY, x + smileyWidth, 
+                    aDrawRect.iBr.iY ); 
+                rgn.SubRect( clipRect, NULL );
+                TRect iconRect( x, topY, x + smileyWidth, bottomY );
+                iEdwinExtension->iSmiley->DrawIconL( aGc, iconRect, i + pos );
                 }
             }
         }
@@ -8476,23 +8477,6 @@
     CleanupStack::PopAndDestroy( buf );
     }
 
-void CEikEdwin::HandleScrollForSmileyL()
-    {
-    if ( !iEdwinExtension->iSmiley )
-        {
-        return;
-        }
-    TCursorSelection select( GetVisibleTextRangeL() );
-    if ( select.LowerPos() != iEdwinExtension->iVisibleRange.LowerPos() ||
-        select.HigherPos() != iEdwinExtension->iVisibleRange.HigherPos() )
-        {
-        iEdwinExtension->iVisibleRange.iCursorPos = select.iCursorPos;
-        iEdwinExtension->iVisibleRange.iAnchorPos = select.iAnchorPos;
-        }
-    iEdwinExtension->iSmiley->SetVisibleRange( select.LowerPos(), 
-        select.Length() );
-    }
-
 TBool CEikEdwin::AdjustCursorForSmileyL( TInt aOldCursor, TCursorSelection& aSelect )
     {
     TBool ret( EFalse );
@@ -8518,23 +8502,6 @@
     return TRect( viewRect.iTl.iX, aRect.iTl.iY, viewRect.iBr.iX, aRect.iBr.iY );
     }
 
-void CEikEdwin::GetClipRegionForSmiley( RRegion& rgn, CFont& aFont, 
-    const TDesC& aText, const TPoint& aPt, const TRect& aDrawRect ) const
-    {
-    TInt smileyWidth( aFont.TextWidthInPixels( KSmileyString ) );
-    TInt topY( aDrawRect.iTl.iY );
-    TInt bottomY( aDrawRect.iBr.iY );
-    for ( TInt i( 0 ); i < aText.Length(); i++ )
-        {
-        if ( CSmileyManager::IsSmileyCode( aText[i] ) )
-            {
-            TInt x( aPt.iX + aFont.TextWidthInPixels( aText.Left( i ) ) );
-            TRect rect( x, topY, x + smileyWidth, bottomY );
-            rgn.SubRect( rect, NULL );
-            }
-        }
-    }
-
 TBool CEikEdwin::AdjustCursorPosByMovementL( TCursorPosition::TMovementType aMovement, 
     TBool aSelect )
     {
@@ -8561,21 +8528,34 @@
     return ret;
     }
 
-void CEikEdwin::SetSelectionVisibilityL( TBool isVisable )
-    {
-    iTextView->SetSelectionVisibilityL(isVisable);
+void CEikEdwin::SetSelectionVisibilityL( TBool aIsVisable )
+    {
+    if ( iEdwinExtension->iSmiley && !aIsVisable )
+        {
+        iTextView->SetSelectionVisibilityL( aIsVisable );
+        HandleSelectionForSmiley( TCursorSelection( 0, 0 ) );
+        }
+    else 
+        {
+        if ( iEdwinExtension->iSmiley )
+            {
+            HandleSelectionForSmiley( Selection() );
+            }
+        iTextView->SetSelectionVisibilityL( aIsVisable );
+        }
+   
     CAknEdwinState*edwinState = EditorState();
-    if( !edwinState )
-    	return;
-    if(isVisable)
-    	{
-        SetAknEditorFlags( edwinState->Flags() | EAknEditorFlagSelectionVisible );
-    	}
-    else
-    	{
-        HandleSelectionForSmiley( TCursorSelection( 0, 0 ) );
-    	SetAknEditorFlags( edwinState->Flags() & ~EAknEditorFlagSelectionVisible );
-    	}
+    if ( edwinState )
+        {
+        if ( aIsVisable )
+            {
+            SetAknEditorFlags( edwinState->Flags() | EAknEditorFlagSelectionVisible );
+            }
+        else
+            {
+            SetAknEditorFlags( edwinState->Flags() & ~EAknEditorFlagSelectionVisible );
+            }
+        }
     return;
     }
 TBool CEikEdwin::IsSelectionVisible()
@@ -8793,6 +8773,50 @@
     }
 
 
+// ---------------------------------------------------------------------------
+// CEikEdwin::DrawViewBackground
+// ---------------------------------------------------------------------------
+//
+void CEikEdwin::DrawViewBackground( TBool aStart ) const
+    {
+    CWindowGc& gc = SystemGc();
+    RWindow& window = Window();
+
+    if ( aStart )
+        {
+        TRect viewRect( iTextView->ViewRect() );
+        window.Invalidate( viewRect );
+        window.BeginRedraw( viewRect );
+        gc.Activate( window );
+    
+        if ( !AknsDrawUtils::DrawBackground( 
+                iEdwinExtension->iSkinInstance, 
+                SkinBackgroundControlContext(),
+                this,
+                gc,
+                viewRect.iTl,
+                viewRect,
+                KAknsDrawParamNoClearUnderImage ) )
+            {
+            gc.SetBrushStyle( CGraphicsContext::ESolidBrush );
+            gc.SetPenStyle( CGraphicsContext::ESolidPen );
+    
+            TRgb dummyColor;
+            TRgb backgroundColor = EditorBackgroundColor( dummyColor ); 
+    
+            gc.SetBrushColor( backgroundColor );
+            gc.SetPenColor( backgroundColor );
+            gc.DrawRect( iTextView->ViewRect() );
+            }
+        }
+    else
+        {
+        gc.Deactivate();
+        window.EndRedraw();
+        }
+    }
+
+
 void CEikEdwin::HandleSelectionForSmiley( TCursorSelection aSelect )
     {
     if ( !iEdwinExtension->iSmiley )