javauis/eswt_akn/org.eclipse.ercp.swt.s60/native/src/swttextbase.cpp
branchRCL_3
changeset 60 6c158198356e
parent 34 71c436fe3ce0
--- a/javauis/eswt_akn/org.eclipse.ercp.swt.s60/native/src/swttextbase.cpp	Thu Jul 15 18:31:06 2010 +0300
+++ b/javauis/eswt_akn/org.eclipse.ercp.swt.s60/native/src/swttextbase.cpp	Thu Aug 19 09:48:13 2010 +0300
@@ -216,19 +216,37 @@
         charMask.SetAttrib(EAttFontPosture);
     }
 
-    // when we set the new font color also changes. So we have to set the color again.
-    if (!iTextColor)
+    TRgb color(0);
+    TInt err(KErrNone);
+
+    if (HasHighlight())
     {
-        TRgb color;
-        AknsUtils::GetCachedColor(AknsUtils::SkinInstance(), color,
-                                  KAknsIIDQsnTextColors, EAknsCIQsnTextColorsCG6);
-        charFormat.iFontPresentation.iTextColor = color;
+        err = AknsUtils::GetCachedColor(AknsUtils::SkinInstance()
+                                        , color
+                                        , KAknsIIDQsnTextColors
+                                        , KHighlightedTextColor);
+        if (err == KErrNone)
+        {
+            charFormat.iFontPresentation.iTextColor = color;
+            charMask.SetAttrib(EAttColor);
+        }
+    }
+    else if (iTextColor)
+    {
+        charFormat.iFontPresentation.iTextColor = GetForeground();
         charMask.SetAttrib(EAttColor);
     }
     else
     {
-        charFormat.iFontPresentation.iTextColor = GetForeground();
-        charMask.SetAttrib(EAttColor);
+        err = AknsUtils::GetCachedColor(AknsUtils::SkinInstance()
+                                        , color
+                                        , KAknsIIDQsnTextColors
+                                        , KNonHighlightedTextColor);
+        if (err == KErrNone)
+        {
+            charFormat.iFontPresentation.iTextColor = color;
+            charMask.SetAttrib(EAttColor);
+        }
     }
 
     if (iStyle & KSwtStyleSingle)
@@ -287,18 +305,23 @@
 void CSwtTextBase::SetForegroundL(const MSwtColor* aColor)
 {
     ASwtControlBase::DoSetForegroundL(aColor);
-    TRgb color(aColor ? aColor->RgbValue() :
-               iDisplay.CoeEnv()->Color(EColorControlText));
-    if (iEditor)
+
+    iTextColor = ETrue;
+    if (!aColor)
+    {
+        iTextColor = EFalse;
+    }
+    else if (iEditor)
     {
         TCharFormat charFormat;
         TCharFormatMask charMask;
-        charFormat.iFontPresentation.iTextColor=color;
+        charFormat.iFontPresentation.iTextColor = aColor->RgbValue();
         charMask.SetAttrib(EAttColor);
         static_cast<CGlobalText*>(iEditor->Text())->
         ApplyCharFormatL(charFormat, charMask, 0, iEditor->TextLength());
-        iTextColor = ETrue;
     }
+
+    UpdateTextColor();
     Redraw();
 }
 
@@ -345,6 +368,61 @@
     return ASwtScrollableBase::Dispose();
 }
 
+TInt CSwtTextBase::PressBackgroundPolicy() const
+{
+    return EPressBackground;
+}
+
+void CSwtTextBase::UpdateTextColor()
+{
+    if (iEditor)
+    {
+        TCharFormat charFormat;
+        TCharFormatMask charMask;
+        TRgb color(0);
+        TInt err(KErrNone);
+
+        if (HasHighlight())
+        {
+            // Highlighted foreground color, overrides all others.
+            err = AknsUtils::GetCachedColor(AknsUtils::SkinInstance()
+                                            , color
+                                            , KAknsIIDQsnTextColors
+                                            , KHighlightedTextColor);
+            if (err == KErrNone)
+            {
+                charFormat.iFontPresentation.iTextColor = color;
+            }
+        }
+        else if (iTextColor)
+        {
+            // Custom foreground color, overrides the default.
+            charFormat.iFontPresentation.iTextColor = GetForeground();
+        }
+        else
+        {
+            // Default foreground color.
+            err = AknsUtils::GetCachedColor(AknsUtils::SkinInstance()
+                                            , color
+                                            , KAknsIIDQsnTextColors
+                                            , KNonHighlightedTextColor);
+            if (err == KErrNone)
+            {
+                charFormat.iFontPresentation.iTextColor = color;
+            }
+        }
+
+        charMask.SetAttrib(EAttColor);
+        TRAP_IGNORE(static_cast<CGlobalText*>(iEditor->Text())->
+                    ApplyCharFormatL(charFormat, charMask, 0, iEditor->TextLength()));
+    }
+}
+
+void CSwtTextBase::HandleHighlightChange()
+{
+    UpdateTextColor();
+}
+
 // ---------------------------------------------------------------------------
 // CSwtTextBase::ComputeDelta
 // ---------------------------------------------------------------------------
@@ -835,9 +913,11 @@
 
     if (aType == KAknsMessageSkinChange || aType == KEikDynamicLayoutVariantSwitch)
     {
+        // The highlight color will be updated from ProcessFontUpdateL()
+
         if (!iFont)
         {
-            RetrieveDefaultFontL();
+            RetrieveDefaultFontL(); // ProcessFontUpdateL() will get called also.
         }
         else
         {
@@ -906,14 +986,15 @@
         vsb->HandlePointerEventL(aPointerEvent);
     }
 
+    TBool forward(EFalse);
+    TPointerEvent pointerEvent(aPointerEvent);
+
     // Edwin tap. Button1Up after the long tap is not forwarded to the editor
     if (!(aPointerEvent.iType == TPointerEvent::EButton1Up
             && (iDisplay.RevertPointerEvent() || !hit))
             && !iVScrollBarGrabsPointerEvents
             && !iIgnorePointerDown)
     {
-        TPointerEvent pointerEvent(aPointerEvent);
-
         // If clicking on margins, move the pointer event.
         TRect viewRect(iEditor->TextView()->ViewRect());
         TRect viewRectWithoutMargins(viewRect);
@@ -949,7 +1030,7 @@
             }
         }
 
-        iEditor->HandlePointerEventL(pointerEvent);
+        forward = ETrue;
     }
 
     // Stop scrollbar grabbing
@@ -967,7 +1048,9 @@
     }
 
     if (pressed != iPressed)
-        Redraw();
+    {
+        GetShell().UpdateHighlight(ETrue); // draw now
+    }
 #endif
 
 #ifndef RD_JAVA_S60_RELEASE_9_2
@@ -975,6 +1058,12 @@
     iIgnorePointerDown = EFalse;
 #endif // RD_JAVA_S60_RELEASE_9_2
 
+    // Forwarding this late due to splitview + pressed flicker issues.
+    if (forward)
+    {
+        iEditor->HandlePointerEventL(pointerEvent);
+    }
+
     PostMouseEventL(aPointerEvent);
 }
 #else //RD_SCALABLE_UI_V2
@@ -1175,25 +1264,6 @@
 }
 
 // ---------------------------------------------------------------------------
-// CSwtTextBase::FocusBackgroundPolicy
-// From MSwtControl
-// While background color is set, the editor's control context must be null,
-// otherwise there will be ugly background drawing problems while typing.
-// ---------------------------------------------------------------------------
-//
-TInt CSwtTextBase::FocusBackgroundPolicy() const
-{
-    if (!IsDefaultBackgroundUse())
-    {
-        return EEmbeddedFocusBackground;
-    }
-    else
-    {
-        return ASwtControlBase::FocusBackgroundPolicy();
-    }
-};
-
-// ---------------------------------------------------------------------------
 // CSwtTextBase::ClientRect
 // From MSwtControl
 // ---------------------------------------------------------------------------