diff -r ac7e4d1d9209 -r ebd48d2de13c textinput/peninputarc/src/peninputlayoutcontrol/peninputlayoutmultilineicfeditor.cpp --- a/textinput/peninputarc/src/peninputlayoutcontrol/peninputlayoutmultilineicfeditor.cpp Thu Aug 19 10:15:25 2010 +0300 +++ b/textinput/peninputarc/src/peninputlayoutcontrol/peninputlayoutmultilineicfeditor.cpp Tue Aug 31 15:31:50 2010 +0300 @@ -46,10 +46,6 @@ #include "peninputlayoutsmiley.h" #include - -#include -#include - const TInt KParagraphSeperator = 0x2029; const TInt KSecretUpdateTimer = 1000000; // 1s const TInt KSecretInstantShowTimer = 100000; // 100ms @@ -57,10 +53,8 @@ const TUint16 KSegment = 0x0020; // separator between prompt text and normal text, // should use localized character soon -//const TUint16 KSeparator = 0x003a; -//const TUint16 KSeparatorcn = 0xff1a; -const TUint16 KColon = 0x003a; -const TUint16 KColoncn = 0xff1a; +const TUint16 KSeparator = 0x003a; +const TUint16 KSeparatorcn = 0xff1a; _LIT(KLineSeparator, "\n"); const TInt KStar = '*'; @@ -69,9 +63,6 @@ const TInt KMsgBubblePosAdjustValueX = 3; const TInt KMsgBubblePosAdjustValueY = 2; const TInt KPromptAdjustLen = 5; -// Tooltip position adjust -const TInt KTooltipPosAdjustValueY = 5; - EXPORT_C CFepLayoutMultiLineIcfEditor* CFepLayoutMultiLineIcfEditor::NewL(TRect aRect, CFepUiLayout* aUiLayout, TInt aControlId, @@ -117,8 +108,8 @@ if(aUiLayout) { //Advanced Tactile feedback REQ417-47932 - SetTactileFeedbackType(ETouchFeedbackSensitiveInput); - aUiLayout->RegisterFeedbackArea(reinterpret_cast(this),aRect,ETouchFeedbackSensitiveInput); + SetTactileFeedbackType(ETouchFeedbackSensitiveKeypad); + aUiLayout->RegisterFeedbackArea(reinterpret_cast(this),aRect,ETouchFeedbackSensitiveKeypad); } #endif //RD_TACTILE_FEEDBACK } @@ -156,11 +147,11 @@ delete iFormExtendedInterfaceProvider; iFormExtendedInterfaceProvider = NULL; } - iCoeEnv->ScreenDevice()->ReleaseFont(CONST_CAST(CFont*, iFont)); + delete iSmileyManager; } -void CFepLayoutMultiLineIcfEditor::InitTextLayoutL(const CFont *aFont) +void CFepLayoutMultiLineIcfEditor::InitTextLayoutL() { iParaFormatLayer=CParaFormatLayer::NewL(); iCharFormatLayer=CCharFormatLayer::NewL(); @@ -190,7 +181,7 @@ //iCtrl->SetContainerWindowL(*iWin); //iWin->Construct(iCoeEnv->RootWin(),reinterpret_cast(iCtrl)); //ctrl->SetExtent(iViewRect.iTl, iViewRect.Size()); - SetFontL(aFont); + iTextView = CTextView::NewL(iLayout, iViewRect, BitmapDevice(), @@ -277,8 +268,8 @@ iAlignment = aAlignment; } -void CFepLayoutMultiLineIcfEditor::BaseConstructL(TInt /*aFontHeight*/, - TInt /*aMaxFontHeight*/, +void CFepLayoutMultiLineIcfEditor::BaseConstructL(TInt aFontHeight, + TInt aMaxFontHeight, const CFont* aFont) { CFepUiBaseCtrl::BaseConstructL(); @@ -287,10 +278,10 @@ //iMaxFontHeight = aMaxFontHeight; //iFontHeight = aFontHeight; //iFont = aFont; - InitTextLayoutL(aFont); + InitTextLayoutL(); iInsertionPoint = UiLayout()->CreateCursor(); iInsertionPoint->SetOwner(this); - //SetFontL(aFont); + SetFontL(aFontHeight, aMaxFontHeight, aFont); iSecretTextTimer = CPeriodic::NewL(CActive::EPriorityStandard); @@ -349,6 +340,7 @@ void CFepLayoutMultiLineIcfEditor::RecalculatePosByNewPromptTextL(const TDesC& aNewPromptText) { + // recalculate cursor pos AdjustSelectionL(TCursorSelection(iTextView->Selection().iCursorPos + aNewPromptText.Length() - iPromptTextLen, iTextView->Selection().iAnchorPos + aNewPromptText.Length() - iPromptTextLen)); @@ -360,6 +352,7 @@ iPreAutoEndPos += (aNewPromptText.Length() - iPromptTextLen); iPreTextSelStartPos += (aNewPromptText.Length() - iPromptTextLen); iPreTextSelEndPos += (aNewPromptText.Length() - iPromptTextLen); + } const HBufC* CFepLayoutMultiLineIcfEditor::PromptText() @@ -369,6 +362,7 @@ void CFepLayoutMultiLineIcfEditor::SetPromptTextL(const TDesC& aPromptText, TBool aCleanContent) { + if ( aCleanContent ) { //clean all the content (include prompt text) on the ICF @@ -380,24 +374,15 @@ iNoMatchState = EFalse; } else - { - if ( ( ( !iInitPromptText && aPromptText.Length() == 0 ) )|| + { + /*if ( ( ( !iInitPromptText && aPromptText.Length() == 0 ) )|| ( iInitPromptText && *iInitPromptText == aPromptText && iPromptText && TextWidth(*iPromptText) <= iViewRect.Width()) ) { //prompt text has not been change then need not to be reset //but iLineSeparator may be changed, need reset prompt text - TBool newLineSeparator = iLineSeparator; - if ( !iLineSeparator ) - { - newLineSeparator = ( TBidiText::TextDirectionality( aPromptText ) - == TBidiText:: ERightToLeft ); - } - if ( newLineSeparator == iLineSeparator ) - { - return; - } - } + return; + }*/ //prompt text need to be reset and not clean the content iRichText->DeleteL( 0, iPromptTextLen ); iTextView->HandleInsertDeleteL(TCursorSelection(0, 0), iPromptTextLen ); @@ -445,31 +430,19 @@ iPromptText = HBufC::NewL(prompttextLen); TPtr text = iPromptText->Des(); - TBuf<1> ptrEllipsis; - ptrEllipsis.Append( KEllipsis ); - - TPtrC ptrSpace(&KSegment, 1); - TPtrC ptrColon(&KColon, 1); - - TInt separatorLen = TextWidth(ptrSpace) + TextWidth(ptrColon) + TextWidth(ptrEllipsis); - TInt textWidth = TextWidth(aPromptText); + TBuf<1> ptr0; + ptr0.Append( KEllipsis ); - if ((aPromptText.LocateReverse(KColon) != aPromptText.Length() - 1) && - (aPromptText.LocateReverse(KColoncn) != aPromptText.Length() - 1)) - { - textWidth += TextWidth(ptrSpace) + TextWidth(ptrColon); - } - - else - { - textWidth += TextWidth(ptrSpace); - } - - TBool truncated = EFalse; + TPtrC ptr1(&KSegment, 1); + TPtrC ptr2(&KSeparator, 1); - if (textWidth > iViewRect.Width() ) - { - truncated = ETrue; + TInt separatorLen = TextWidth(ptr1) + TextWidth(ptr2) + TextWidth(ptr0); + TInt textWidth = TextWidth(aPromptText) + separatorLen; + TBool ret = EFalse; + + if (textWidth >= iViewRect.Width() ) + { + ret = ETrue; AknBidiTextUtils::ConvertToVisualAndClip(aPromptText, text, *iFont, @@ -491,23 +464,23 @@ text.Delete( text.Length()-1, 1 ); } - if ((text.LocateReverse(KColon) != text.Length() - 1) && - (text.LocateReverse(KColoncn) != text.Length() - 1)) + if ((text.LocateReverse(KSeparator) != text.Length() - 1) && + (text.LocateReverse(KSeparatorcn) != text.Length() - 1)) { // if sent prompt text already include separator, then no need to // append it again - if (truncated) - { - text.Append( ptrEllipsis ); - } - text.Append(ptrColon); - } - else if (truncated) + if ( ret ) { - text.Insert( text.Length()-1, ptrEllipsis ); - } + text.Append( ptr0 ); + } + text.Append(ptr2); + } + else if ( ret ) + { + text.Insert( text.Length()-1, ptr0 ); + } - text.Append(ptrSpace); // segment between prompt text and official text + text.Append(ptr1); // segment between prompt text and official text textWidth = TextWidth(text); iRichText->InsertL(0, text); @@ -559,7 +532,6 @@ iRichText->DeleteL(iPromptTextLen, delLen ); iTextView->HandleInsertDeleteL(TCursorSelection(iPromptTextLen, iPromptTextLen), delLen); - iTextView->SetSelectionL(TCursorSelection(iPromptTextLen, iPromptTextLen)); } ptr.Copy(icfdata.iText); } @@ -593,7 +565,6 @@ iCursorSel.iAnchorPos = icfdata.iCurSel.iAnchorPos + iPromptTextLen; DrawMfneText(); iSynCursor = EFalse; - iOldMfneText.Close(); iOldMfneText.CreateL(ptr); } @@ -681,8 +652,7 @@ AdjustSelectionL( icfdata.iCurSel ); RecalcualteTextPositionL(); - //SetMsgBubbleRect(); - SetMsgBubbleRectAccordingToLanguage(); + SetMsgBubbleRect(); Draw(); } break; @@ -838,8 +808,7 @@ } else { - //SetMsgBubbleRect(); - SetMsgBubbleRectAccordingToLanguage(); + SetMsgBubbleRect(); SetInfoBubbleRect(); } } @@ -981,40 +950,26 @@ } TPtrC icftext = editArea->iRichText->Read(editArea->iPromptTextLen, editArea->iRichText->DocumentLength()); - - for (TInt i = 0; i < icftext.Length(); i++) - { - if (icftext[i] != KStar)//find only one none-star char - { - TInt startPos = i + editArea->iPromptTextLen; - TBuf<1> buf; - buf.Append(KStar); + TInt startPos = icftext.LocateReverse(KStar) + 1 + editArea->iPromptTextLen; - TInt textlen = editArea->iRichText->DocumentLength(); + TBuf<1> buf; + buf.Append(KStar); + + TInt textlen = editArea->iRichText->DocumentLength(); - if (startPos < textlen) - { - editArea->iRichText->DeleteL(startPos, 1); - editArea->iTextView->HandleInsertDeleteL(TCursorSelection( - startPos, startPos), 1); - editArea->iRichText->InsertL(startPos, buf); - editArea->iTextView->HandleInsertDeleteL(TCursorSelection( - startPos, startPos + buf.Length()), 0); + if (startPos < textlen) + { + editArea->iRichText->DeleteL(startPos, 1); + editArea->iTextView->HandleInsertDeleteL(TCursorSelection(startPos, startPos), 1); + editArea->iRichText->InsertL(startPos, buf); + editArea->iTextView->HandleInsertDeleteL(TCursorSelection(startPos, startPos+buf.Length()), + 0); - if (startPos == textlen - 1) - { - editArea->iSecretTextTimer->Cancel(); - } - } - break; + if (startPos == textlen - 1) + { + editArea->iSecretTextTimer->Cancel(); } } - - if ( editArea->iCursorVisible ) - { - editArea->SetSelectionL( editArea->iCursorSel ); - editArea->Draw(); - } editArea->UpdateArea(editArea->Rect(),EFalse); return KErrNone; } @@ -1038,9 +993,11 @@ iDimmed = aDimFlag; } -void CFepLayoutMultiLineIcfEditor::SetFontL(const CFont* aFont) +void CFepLayoutMultiLineIcfEditor::SetFontL(TInt aFontHeight, + TInt aMaxFontHeight, + const CFont* aFont) { - TInt newHeightInPixel = iCoeEnv->ScreenDevice()->VerticalPixelsToTwips(aFont->HeightInPixels()); + TInt newHeightInPixel = iCoeEnv->ScreenDevice()->VerticalPixelsToTwips(aFontHeight); TInt OldHeightInPixel = iCoeEnv->ScreenDevice()->VerticalPixelsToTwips(iFontHeight); if( newHeightInPixel == OldHeightInPixel ) @@ -1052,16 +1009,9 @@ iFormatChange = ETrue; } - TFontSpec fontSpec; - fontSpec = aFont->FontSpecInTwips(); - fontSpec.iHeight = aFont->HeightInPixels(); - CFont* font; - iCoeEnv->ScreenDevice()->ReleaseFont(CONST_CAST(CFont*, iFont)); - iCoeEnv->ScreenDevice()->GetNearestFontInPixels((CFont*&)font,fontSpec); - - iMaxFontHeight = font->FontMaxHeight(); - iFontHeight = font->HeightInPixels(); - iFont = font; + iMaxFontHeight = aMaxFontHeight; + iFontHeight = aFontHeight; + iFont = aFont; iCharFormatMask.ClearAttrib( EAttFontUnderline ); @@ -1072,7 +1022,6 @@ iCharFormat.iFontSpec.iHeight = iCoeEnv->ScreenDevice()->VerticalPixelsToTwips(iFontHeight); iCharFormat.iFontSpec.iFontStyle.SetStrokeWeight(EStrokeWeightNormal); iCharFormat.iFontSpec.iFontStyle.SetBitmapType(EAntiAliasedGlyphBitmap); - iCharFormat.iFontSpec.iTypeface = iFont->FontSpecInTwips().iTypeface; iRichText->ApplyCharFormatL(iCharFormat, iCharFormatMask, 0, iRichText->DocumentLength()); if( InlineStateOn() || AutoCompletionStateOn() ) @@ -1080,11 +1029,8 @@ iCharFormatMask.ClearAll(); iCharFormatMask.SetAttrib( EAttFontUnderline ); iCharFormat.iFontPresentation.iUnderline = EUnderlineOn ; - if( iPreInlineStartPos >= 0 && iPreInlineEndPos <= iRichText->DocumentLength() + 1 ) - { - iRichText->ApplyCharFormatL(iCharFormat, iCharFormatMask, iPreInlineStartPos, - iPreInlineEndPos - iPreInlineStartPos); - } + iRichText->ApplyCharFormatL(iCharFormat, iCharFormatMask, iPreInlineStartPos, + iPreInlineEndPos - iPreInlineStartPos); } //iRichText->SetInsertCharFormatL(iCharFormat, iCharFormatMask, iRichText->DocumentLength() - iPromptTextLen); @@ -1151,7 +1097,7 @@ TRect innerrect = Rect(); //innerrect.Shrink(4, 4); - AknsDrawUtils::DrawFrame(UiLayout()->SkinInstance(), + AknsDrawUtils::DrawFrame(AknsUtils::SkinInstance(), *gc, Rect(), innerrect, @@ -1208,7 +1154,7 @@ TInt baseLine = iFont->AscentInPixels()/2 + rect.Height()/2; TRect clipRect = - TRect( TPoint(Rect().iTl.iX + 1, rect.iTl.iY), TPoint( Rect().iBr.iX - 1, rect.iBr.iY)); + TRect( TPoint(Rect().iTl.iX, rect.iTl.iY), TPoint( Rect().iBr.iX, rect.iBr.iY)); gc->SetClippingRect( clipRect ); gc->Clear( clipRect ); @@ -1218,7 +1164,7 @@ if (iSkinIdSet) { - AknsDrawUtils::DrawFrame(UiLayout()->SkinInstance(), + AknsDrawUtils::DrawFrame(AknsUtils::SkinInstance(), *gc, Rect(), Rect(), @@ -1328,9 +1274,7 @@ } TRAP_IGNORE(RecalcualteTextPositionL()); - - //SetMsgBubbleRect(); - SetMsgBubbleRectAccordingToLanguage(); + SetMsgBubbleRect(); } void CFepLayoutMultiLineIcfEditor::ResetViewHeightL() @@ -1382,31 +1326,6 @@ iTextView->SetViewRect(iViewRect); } -void CFepLayoutMultiLineIcfEditor::SetMsgBubbleRectAccordingToLanguage() - { - if ( iPreLanguageID == ELangPrcChinese || - iPreLanguageID == ELangHongKongChinese || - iPreLanguageID == ELangTaiwanChinese || - iPreLanguageID == ELangKorean ) - { - SetMsgBubbleRect(); - return; - } - else - { - if(( !iMsgBubble->IsShowing() && !iHideBubbleTemp ) || - iLineMaxCount < 1 || iCursorSel.iCursorPos < 0 ) - { - return; - } - - iMsgBubble->Popup( iMsgBubble->Rect()); - iHideBubbleTemp = EFalse; - - return; - } - } - void CFepLayoutMultiLineIcfEditor::SetMsgBubbleRect() { if( ( !iMsgBubble->IsShowing() && !iHideBubbleTemp ) || @@ -1647,9 +1566,7 @@ iInfoBubble->SetRect( TRect(leftTop,aSize) ) ; } -void CFepLayoutMultiLineIcfEditor::ShowTooltipL( const TDesC& aText, - const TRect& aRect, - TInt aLangCode ) +void CFepLayoutMultiLineIcfEditor::ShowTooltipL(const TDesC& aText) { if ( !iTooltip ) { @@ -1657,34 +1574,28 @@ } iTooltip->SetTextL( aText ); - iTooltip->SetLangCode( aLangCode ); - TPoint tl( 0, 0 ), br( 0, 0 ); - InlineTextPos( tl, br ); - + TPoint tl = iInsertionPoint->Position(); if ( iLineMaxCount > 1 ) { TBool firstLine = iLayout->FirstLineInBand() == iLineNumber; if ( firstLine ) - { - tl.iY += KTooltipPosAdjustValueY; + { + tl.iY += iInsertionPoint->Height(); } else { - tl.iY -= ( iFormatLineHeight + aRect.Height() - KTooltipPosAdjustValueY ); + tl.iY -= iTooltip->Rect().Height(); } - } + } + TRect tooltipRect = TRect( tl, iTooltip->Rect().Size() ); - TRect tooltipRect = TRect( tl, aRect.Size() ); - - // Make sure the right border of tooltip isn't be out of icf rect TInt moveX = tooltipRect.iBr.iX - Rect().iBr.iX; if ( moveX > 0 ) { tooltipRect.iBr.iX -= moveX; tooltipRect.iTl.iX -= moveX; } - - // Make sure tooltip isn't overlapped by msg bubble. + if ( tooltipRect.Intersects( iMsgBubble->Rect() ) ) { moveX = tooltipRect.iBr.iX - iMsgBubble->Rect().iTl.iX; @@ -1699,13 +1610,7 @@ tooltipRect.iBr.iX += moveX; tooltipRect.iTl.iX += moveX; } - } - - if (( iTooltip->Rect().iTl != tooltipRect.iTl ) && ( iTooltip->Rect().iBr != tooltipRect.iBr )) - { - iTooltip->Close(); } - iTooltip->Popup( tooltipRect ); } @@ -1729,15 +1634,15 @@ } void CFepLayoutMultiLineIcfEditor::SizeChangedL(const TRect& aRect, - TInt /*aFontHeight*/, - TInt /*aMaxFontHeight*/, + TInt aFontHeight, + TInt aMaxFontHeight, const CFont* aFont) { TRect oriRect = Rect(); AdjustBmpDeviceIfNeeded(); // apply font formats - SetFontL( aFont); + SetFontL(aFontHeight, aMaxFontHeight, aFont); if ( !iFormatChange && oriRect == aRect ) { @@ -1764,10 +1669,10 @@ iLayout->SetAmountToFormat(CTextLayout::EFFormatAllText); -// if ( iFormatChange ) -// { -// iTextView->HandleGlobalChangeNoRedrawL(); -// } + if ( iFormatChange ) + { + iTextView->HandleGlobalChangeNoRedrawL(); + } TBool ready = Ready(); if( ready ) @@ -1781,19 +1686,13 @@ SetReady( ETrue ); } -// if ( iFormatChange ) -// { -// iTextView->SetSelectionL( iTextView->Selection() ); -// RecalcualteTextPositionL(); -// SetMsgBubbleRect(); -// Draw(); -// } - iTextView->HandleGlobalChangeNoRedrawL(); - iTextView->SetSelectionL( iTextView->Selection() ); - RecalcualteTextPositionL(); - //SetMsgBubbleRect(); - SetMsgBubbleRectAccordingToLanguage(); - Draw(); + if ( iFormatChange ) + { + iTextView->SetSelectionL( iTextView->Selection() ); + RecalcualteTextPositionL(); + SetMsgBubbleRect(); + Draw(); + } } TBool CFepLayoutMultiLineIcfEditor::BelongToPromptText(TInt aPos) @@ -1916,8 +1815,8 @@ break; case CFepLayoutMultiLineIcf::EIcfAutoComplete: { - if ( iTextView->Selection().iCursorPos >= iPreInlineStartPos - && iTextView->Selection().iCursorPos < iPreAutoEndPos ) + if (iTextView->Selection().iCursorPos >= iPreInlineStartPos && + iTextView->Selection().iCursorPos < iPreInlineEndPos ) { iPntDownOnInline = ETrue; CapturePointer(EFalse); @@ -1930,6 +1829,18 @@ ReportEvent(EEventPointerDownOnInline); } } + else + { + // do nothing + //submit autocomplete when set text + if (iTooltip && !iTooltip->IsShowing()) + { + ReportEvent( EEventControlFocusGained ); + UiLayout()->SignalOwner( ESignalCommitITIInlineText ); + SetInlineStateL( EFalse, iPreInlineStartPos, iPreInlineEndPos ); + SetAutoCompleteStateL( EFalse ); + } + } } break; case CFepLayoutMultiLineIcf::EIcfNormal: @@ -1987,19 +1898,6 @@ iCursorSel = TCursorSelection(cursorPos+iPromptTextLen, iCursorSel.iAnchorPos); AdjustFepCursorPosForPromptText( ETrue ); - - TAmPmName amName(EAm); - TAmPmName pmName(EPm); - TInt offset = iMfneIcfData->Find(amName)!= KErrNotFound? - iMfneIcfData->Find(amName):iMfneIcfData->Find(pmName); - //if current is 12-hour format and touch on correct position - if(offset != KErrNotFound && - iCursorSel.LowerPos()-iPromptTextLen>= offset && - iCursorSel.LowerPos()-iPromptTextLen<= offset+amName.Length()) - { - UiLayout()->SignalOwner(ESignalChangeAmPm); - } - return this; } @@ -2028,6 +1926,10 @@ else { AdjustFepCursorPosForPromptText( !iPntDownOnInline ); + if(iState != CFepLayoutMultiLineIcf::EIcfNormal) + { + UiLayout()->SignalOwner( ESignalStartInlineText ); + } } } @@ -2164,7 +2066,7 @@ { if ( iLastCursorPos != iCursorSel.iCursorPos ) { - UiLayout()->DoTactileFeedback(ETouchFeedbackEdit); + UiLayout()->DoTactileFeedback(ETouchFeedbackSensitiveKeypad); iLastCursorPos = iCursorSel.iCursorPos; } } @@ -2552,10 +2454,7 @@ iCharFormat.iFontPresentation.iTextColor = iTextColor; // set prompt text as bold - if( aPromptTextLen <= iRichText->DocumentLength() + 1) - { - iRichText->ApplyCharFormatL(iCharFormat, iCharFormatMask, 0, aPromptTextLen );//- 1 - } + iRichText->ApplyCharFormatL(iCharFormat, iCharFormatMask, 0, aPromptTextLen );//- 1 iTextView->HandleRangeFormatChangeL(TCursorSelection(0, aPromptTextLen ), ETrue);//- 1 // set remain text as non-bold @@ -2593,13 +2492,12 @@ iCharFormatMask.SetAttrib(aAttribute); - // comment for updating format anyway. - //if (IsTextPosValid(aPreStartPos) && IsTextPosValid(aPreEndPos)) - //{ - iRichText->ApplyCharFormatL(iCharFormat, iCharFormatMask, 0, + if (IsTextPosValid(aPreStartPos) && IsTextPosValid(aPreEndPos)) + { + iRichText->ApplyCharFormatL(iCharFormat, iCharFormatMask, 0, iRichText->DocumentLength()); //iTextView->HandleRangeFormatChangeL(TCursorSelection(aPreStartPos, aPreEndPos), ETrue); - //} + } aPreStartPos = 0; aPreEndPos = 0; @@ -2619,23 +2517,17 @@ } iCharFormatMask.SetAttrib(aAttribute); - TInt aPos = Min( aStartPos, aEndPos ); - TInt aLength = Abs( aEndPos - aStartPos ); if (aNoMatchState) { - if ( aPos >= 0 && aPos + aLength <= iRichText->DocumentLength()) - { - iRichText->ApplyCharFormatL(iCharFormat, iCharFormatMask, aPos, aLength + 1); - iTextView->HandleRangeFormatChangeL(TCursorSelection(aStartPos, aEndPos + 1), ETrue); - } + iRichText->ApplyCharFormatL(iCharFormat, iCharFormatMask, + Min(aStartPos,aEndPos), Abs( aEndPos - aStartPos ) + 1); + iTextView->HandleRangeFormatChangeL(TCursorSelection(aStartPos, aEndPos + 1), ETrue); } else { - if ( aPos >= 0 && aPos + aLength <= iRichText->DocumentLength() + 1 ) - { - iRichText->ApplyCharFormatL(iCharFormat, iCharFormatMask, aStartPos, aLength ); - iTextView->HandleRangeFormatChangeL(TCursorSelection(aStartPos, aEndPos), ETrue); - } + iRichText->ApplyCharFormatL(iCharFormat, iCharFormatMask, + Min(aStartPos,aEndPos), Abs( aEndPos - aStartPos ) ); + iTextView->HandleRangeFormatChangeL(TCursorSelection(aStartPos, aEndPos), ETrue); } aPreStartPos = aStartPos; @@ -2744,16 +2636,17 @@ { TRAP_IGNORE(iMsgBubble->SetTextL(aText)); iHideBubbleTemp = ETrue; - //SetMsgBubbleRect(); - SetMsgBubbleRectAccordingToLanguage(); + SetMsgBubbleRect(); } void CFepLayoutMultiLineIcfEditor::ShowByteWarningBubble(const TDesC& aInfo) { TSize size = iInfoBubble->Rect().Size(); - CFont::TMeasureTextInput input;// = new (ELeave) CFont::TMeasureTextInput; - input.iMaxBounds = iRect.Width(); - TInt width = iFont->MeasureText(aInfo, &input, NULL); + CFont::TMeasureTextInput* input = new (ELeave) CFont::TMeasureTextInput; + CleanupStack::PushL(input); + input->iMaxBounds = iRect.Width(); + TInt width = iFont->MeasureText(aInfo, input, NULL); + CleanupStack::PopAndDestroy(); size.SetSize(width, size.iHeight); SetInfoBubbleCtrlSize(size); TRAP_IGNORE(iInfoBubble->SetTextL(aInfo)); @@ -2781,7 +2674,7 @@ { if( !iFormatChange ) { - return ; + return; } //apply line space CParaFormat* paraFormat=CParaFormat::NewL(); @@ -2823,12 +2716,12 @@ void CFepLayoutMultiLineIcfEditor::ResetApplyFont() { - //TInt fontHeight = iFontHeight; - //TInt maxFontHeight = iMaxFontHeight; + TInt fontHeight = iFontHeight; + TInt maxFontHeight = iMaxFontHeight; const CFont *font = iFont; iFontHeight = 0; - TRAP_IGNORE(SetFontL(font)); + TRAP_IGNORE(SetFontL(fontHeight, maxFontHeight, font)); } void CFepLayoutMultiLineIcfEditor::TryDisplayMaxTextL( TInt aCursorPos ) @@ -2845,8 +2738,7 @@ { iTextView->SetViewLineAtTopL(( lineIndex + 1 ) - ( iLineMaxCount - 1 )); RecalcualteTextPositionL(); - //SetMsgBubbleRect(); - SetMsgBubbleRectAccordingToLanguage(); + SetMsgBubbleRect(); } } @@ -2865,8 +2757,7 @@ lineCount - pageCount + 1 < 1 ? 1 : lineCount - pageCount + 1 ); RecalcualteTextPositionL(); - //SetMsgBubbleRect(); - SetMsgBubbleRectAccordingToLanguage(); + SetMsgBubbleRect(); } } } @@ -2904,13 +2795,13 @@ if ( BelongToPromptText(aCurSel.iCursorPos) ) { - //why to use iPromptText->Length() instead of iPromptTextLen + //pls refer to bug: ELWG-7MZ5EZ, why to use iPromptText->Length() instead of iPromptTextLen //iCursorSel.iCursorPos = iPromptTextLen; iCursorSel.iCursorPos = iPromptText->Length(); } if ( BelongToPromptText(aCurSel.iAnchorPos) ) { - //why to use iPromptText->Length() instead of iPromptTextLen + //pls refer to bug: ELWG-7MZ5EZ, why to use iPromptText->Length() instead of iPromptTextLen //iCursorSel.iAnchorPos = iPromptTextLen; iCursorSel.iAnchorPos = iPromptText->Length(); } @@ -2994,7 +2885,7 @@ } void CFepLayoutMultiLineIcfEditor::CalcSmileyClipRegionL( RRegion& aRgn, - CGraphicsContext& /*aGc*/, + CGraphicsContext& aGc, CFont& aFont, const TDesC& aText, TPoint& aBasePoint, @@ -3070,6 +2961,7 @@ CPeninputSmileyImage* smiley = iSmileyManager->SmileyImage( code ); if ( smiley ) { + gc.SetBrushColor( TRgb(255,0,0) ); gc.SetBrushStyle( CGraphicsContext::ENullBrush ); smiley->SetImageSize( rect.Size() );