Memory Leak fixes and Font changes
authorSaravana Balaji <saravana.bs@samsung.com>
Mon, 25 Mar 2013 12:13:38 +0000 (17:43 +0530)
committerwoo <s-w.woo@samsung.com>
Wed, 27 Mar 2013 04:23:28 +0000 (13:23 +0900)
Change-Id: Ife1ac6c23399c91072c2098aa273302f92c31432
Signed-off-by: Saravana Balaji <saravana.bs@samsung.com>
src/ui/controls/FUiCtrl_EditPresenter.cpp
src/ui/controls/FUiCtrl_TokenEditPresenter.cpp
src/ui/inc/FUiCtrl_EditPresenter.h
src/ui/inc/FUiCtrl_TokenEditPresenter.h

index 162b9e7..6af14ba 100755 (executable)
@@ -8182,28 +8182,6 @@ _EditPresenter::IsAutoResizingEnabled(void) const
        return __pEditModel->IsAutoResizingEnabled();
 }
 
-result
-_EditPresenter::SetDefaultFont(void)
-{
-       result r = E_SUCCESS;
-
-       Font* pControlFont = null;
-       _ControlOrientation orientation = __pEdit->GetOrientation();
-       float defaultFontSize = 0.0f;
-       GET_SHAPE_CONFIG(EDIT::DEFAULT_FONT_SIZE, orientation, defaultFontSize);
-
-       __isFontInitialized = false;
-       __contentFontSize = defaultFontSize;
-       __contentFontStyle = FONT_STYLE_PLAIN;
-       pControlFont = __pEdit->GetFallbackFont();
-       if (pControlFont)
-       {
-               AdjustFont(*pControlFont);
-       }
-
-       return r;
-}
-
 float
 _EditPresenter::CalculateFlexibleHeightF(void)
 {
index 4cbcf58..c910c53 100755 (executable)
@@ -184,7 +184,7 @@ _Token::ResetToken(const String& text)
        }
        __pTextBuffer[length] = 0;
 
-       pTextObject->RemoveAll();
+       pTextObject->RemoveAll(true);
 
        TextSimple* pSimpleText = new (std::nothrow)TextSimple(__pTextBuffer, length, TEXT_ELEMENT_SOURCE_TYPE_EXTERNAL, pFont);
        SysTryCatch(NID_UI_CTRL, pSimpleText != null, , E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
@@ -274,7 +274,6 @@ _TokenEditPresenter::_TokenEditPresenter(void)
        , __isEditModeEnabled(true)
        , __pDescriptionTextVisualElement(null)
        , __pDescriptionTextTextObject(null)
-       , __pDescriptionTextFont(null)
        , __isTokenEditingFinished(false)
        , __prevScrollValue(0.0f)
        , __scrollValue(0.0f)
@@ -300,6 +299,7 @@ _TokenEditPresenter::_TokenEditPresenter(void)
        , __isTouchMoveInProgress(false)
        , __isTitleSliding(false)
        , __touchPressInfo(Point(-1, -1))
+       , __editContentFontSize(0.0f)
 {
 }
 
@@ -308,6 +308,8 @@ _TokenEditPresenter::InitializeDescriptionText(void)
 {
        result r = E_SUCCESS;
        float descriptionTextSize = 0.0f;
+       Font *pFont = null;
+       float editFontSize = 0.0f;
 
        __pDescriptionTextTextObject = new (std::nothrow) TextObject();
        SysTryReturnResult(NID_UI_CTRL, __pDescriptionTextTextObject != null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
@@ -324,14 +326,17 @@ _TokenEditPresenter::InitializeDescriptionText(void)
 
        GET_SHAPE_CONFIG(TOKENEDIT::DESCRIPTION_TEXT_SIZE, _CONTROL_ORIENTATION_PORTRAIT, descriptionTextSize);
 
-       __pDescriptionTextFont = new (std::nothrow) Font();
-       SysTryCatch(NID_UI_CTRL, __pDescriptionTextFont != null, , E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
+       pFont = GetFont();
+       SysTryCatch(NID_UI_CTRL, pFont != null, , r, "[%s] Propagating.", GetErrorMessage(r));
 
-       r = __pDescriptionTextFont->Construct(GetTitleFontFaceName(), FONT_STYLE_PLAIN, descriptionTextSize);
-       SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
-       r = __pDescriptionTextTextObject->SetFont(__pDescriptionTextFont, 0, __pDescriptionTextTextObject->GetTextLength());
+       editFontSize = GetTextSize();
+       (_FontImpl::GetInstance(*pFont))->SetSize(descriptionTextSize);
+
+       r = __pDescriptionTextTextObject->SetFont(pFont, 0, __pDescriptionTextTextObject->GetTextLength());
        SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
 
+       (_FontImpl::GetInstance(*pFont))->SetSize(editFontSize);
+
        return r;
 
 CATCH:
@@ -339,9 +344,6 @@ CATCH:
        delete __pDescriptionTextTextObject;
        __pDescriptionTextTextObject = null;
 
-       delete __pDescriptionTextFont;
-       __pDescriptionTextFont = null;
-
        return r;
 }
 
@@ -394,12 +396,6 @@ _TokenEditPresenter::DisposeTokenEditPresenter(void)
        delete __pDescriptionTextTextObject;
        __pDescriptionTextTextObject = null;
 
-       if (__pDescriptionTextFont)
-       {
-               delete __pDescriptionTextFont;
-               __pDescriptionTextFont = null;
-       }
-
        if (__pTimingFunction)
        {
                delete __pTimingFunction;
@@ -474,16 +470,9 @@ _TokenEditPresenter::Initialize(const _Control& control)
        float textSize = 0.0f;
        GET_SHAPE_CONFIG(TOKENEDIT::TEXT_SIZE, orientation, textSize);
 
-       Font* pFont = new (std::nothrow) Font();
-       SysTryCatch(NID_UI_CTRL, pFont != null, , r = E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
-
-       r = pFont->Construct(FONT_STYLE_PLAIN, textSize);
-       SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
-
-       SetFont(*pFont);
+       __editContentFontSize = textSize;
 
-       delete pFont;
-       pFont = null;
+       _EditPresenter::SetTextSize(__editContentFontSize);
 
        __pTokenList = new (std::nothrow) Collection::LinkedList();
        SysTryCatch(NID_UI_CTRL, __pTokenList != null, , r = E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
@@ -510,9 +499,6 @@ CATCH:
        delete pTokenEditModel;
        pTokenEditModel = null;
 
-       delete pFont;
-       pFont = null;
-
        delete __pTokenBgBitmap;
        __pTokenBgBitmap = null;
 
@@ -542,9 +528,9 @@ _TokenEditPresenter::DrawText(void)
                        pTokenCanvas->Clear();
 
                        Color selectedTokenColor = GetTokenEditColor(EXPANDABLE_EDIT_AREA_TOKEN_STATUS_SELECTED);
+                       Bitmap* pReplacementColorBackgroundBitmap = null;
                        if (__pTokenBgBitmap)
                        {
-                               Bitmap* pReplacementColorBackgroundBitmap = null;
                                pReplacementColorBackgroundBitmap = _BitmapImpl::GetColorReplacedBitmapN(*__pTokenBgBitmap, Color::GetColor(COLOR_ID_MAGENTA), selectedTokenColor);
 
                                if (_BitmapImpl::CheckNinePatchedBitmapStrictly(*pReplacementColorBackgroundBitmap))
@@ -566,6 +552,8 @@ _TokenEditPresenter::DrawText(void)
 
                        delete pTokenCanvas;
                        pTokenCanvas = null;
+
+                       delete pReplacementColorBackgroundBitmap;
                }
        }
        else
@@ -582,6 +570,9 @@ _TokenEditPresenter::DrawText(void)
                        SysTryReturnVoidResult(NID_UI_CTRL, pCanvas, E_SYSTEM, "[E_SYSTEM] A system error has occurred. Failed to get visual element of Control.");
 
                        _EditPresenter::DrawText(*pCanvas);
+
+                       delete pCanvas;
+                       pCanvas = null;
                }
        }
 }
@@ -642,7 +633,6 @@ _TokenEditPresenter::Draw(Canvas& canvas)
                }
                else
                {
-                       //DrawText(canvas);
                        DrawText();
                        InitializeCursor();
                }
@@ -651,17 +641,16 @@ _TokenEditPresenter::Draw(Canvas& canvas)
        {
                SysTryReturnResult(NID_UI_CTRL, !__isEditingToken, E_SYSTEM, "An invalid argument is given.");
 
-               //DrawText(canvas);
                DrawText();
                InitializeCursor();
        }
 
        if (__isTokenEditingFinished)
        {
-               _EditPresenter::SetDefaultFont();
-
                __isEditingToken = false;
                __edittingTokenIndex = -1;
+               _EditPresenter::SetTextSize(__editContentFontSize);
+
                __isTokenEditingFinished = false;
        }
 
@@ -968,11 +957,6 @@ _TokenEditPresenter::InsertTokenAt(int index, const String& token, bool isUser)
        r = __pTokenList->InsertAt(*pToken, index);
        SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Failed to insert token.", GetErrorMessage(r));
 
-       if (__isEditingToken)
-       {
-               _EditPresenter::SetFont(*(pToken->pFont));
-       }
-
        r = ClearText();
 
        r = CalculateTokenPositionFromIndex(index);
@@ -1093,7 +1077,7 @@ _TokenEditPresenter::RemoveTokenAt(int index, bool isClearText)
                r = ClearText();
                SysTryReturnResult(NID_UI_CTRL, r == E_SUCCESS, E_SYSTEM, "Failed to clear text object.");
 
-               _EditPresenter::SetDefaultFont();
+               _EditPresenter::SetTextSize(__editContentFontSize);
        }
 
        r = __pTokenList->RemoveAt(index, true);
@@ -1608,7 +1592,7 @@ _TokenEditPresenter::CalculateDescriptionTextRect(const String& descriptionText)
 
        SysAssertf(__pDescriptionTextTextObject != null, "The TextObject instance is null.");
 
-       __pDescriptionTextTextObject->RemoveAll();
+       __pDescriptionTextTextObject->RemoveAll(true);
        pSimpleText = new (std::nothrow)TextSimple(pTempString, length, TEXT_ELEMENT_SOURCE_TYPE_INTERNAL);
        __pDescriptionTextTextObject->AppendElement(*pSimpleText);
 
@@ -1671,20 +1655,17 @@ _TokenEditPresenter::DrawDescriptionText(void)
                float descriptionTextSize = 0.0f;
                GET_SHAPE_CONFIG(TOKENEDIT::DESCRIPTION_TEXT_SIZE, _CONTROL_ORIENTATION_PORTRAIT, descriptionTextSize);
 
-               pDescriptionFont = new (std::nothrow) Font();
-               SysTryReturn(NID_UI_CTRL, pDescriptionFont != null, false, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
-
-               r = pDescriptionFont->Construct(GetTitleFontFaceName(), FONT_STYLE_PLAIN, descriptionTextSize);
-
-               SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
-               r = __pDescriptionTextTextObject->SetFont(pDescriptionFont, 0, __pDescriptionTextTextObject->GetTextLength());
-
-               SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
+               pDescriptionFont = GetFont();
+               if (pDescriptionFont)
+               {
+                       float editFontSize = GetTextSize();
+                       (_FontImpl::GetInstance(*pDescriptionFont))->SetSize(descriptionTextSize);
 
-               delete __pDescriptionTextFont;
-               __pDescriptionTextFont = null;
+                       r = __pDescriptionTextTextObject->SetFont(pDescriptionFont, 0, __pDescriptionTextTextObject->GetTextLength());
+                       SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] A system error has occurred. SetFont failed");
 
-               __pDescriptionTextFont = pDescriptionFont;
+                       (_FontImpl::GetInstance(*pDescriptionFont))->SetSize(editFontSize);
+               }
        }
 
        pRootElement = __pTokenEdit->GetVisualElement();
@@ -1765,15 +1746,10 @@ _TokenEditPresenter::DrawDescriptionText(void)
        __pDescriptionTextTextObject->Draw(*_CanvasImpl::GetInstance(*pDescriptionTextCanvas));
 
        delete pDescriptionTextCanvas;
-       return true;
-CATCH:
-       if (pDescriptionFont == __pDescriptionTextFont)
-       {
-               __pDescriptionTextFont = null;
-       }
 
-       delete pDescriptionFont;
+       return true;
 
+CATCH:
        if (__pDescriptionTextVisualElement != null)
        {
                __pDescriptionTextVisualElement->Destroy();
@@ -1858,11 +1834,13 @@ _TokenEditPresenter::SetEditingTokenTextBounds(int index, bool isSetText)
        float tokenHeight = 0.0f;
        float tokenVerticalSpacing = 0.0f;
        float tokenTextLeftMargin = 0.0f;
+       float tokenFontSize = 0.0f;
        _ControlOrientation orientation = __pTokenEdit->GetOrientation();
 
        GET_SHAPE_CONFIG(TOKENEDIT::TOKEN_HEIGHT, orientation, tokenHeight);
        GET_SHAPE_CONFIG(TOKENEDIT::TOKEN_VERTICAL_SPACING, orientation, tokenVerticalSpacing);
        GET_SHAPE_CONFIG(TOKENEDIT::TOKEN_TEXT_LEFT_MARGIN, orientation, tokenTextLeftMargin);
+       GET_SHAPE_CONFIG(TOKENEDIT::TOKEN_TEXT_SIZE, orientation, tokenFontSize);
 
        _Token* pToken = static_cast <_Token*>(__pTokenList->GetAt(index));
        SysTryReturnResult(NID_UI_CTRL, pToken != null, E_SYSTEM, "A system error has occurred. The _Token instance is null");
@@ -1879,9 +1857,11 @@ _TokenEditPresenter::SetEditingTokenTextBounds(int index, bool isSetText)
                {
                        SetText(pToken->GetText());
                }
-               pToken->pTextObject->RemoveAll();
+               pToken->pTextObject->RemoveAll(true);
        }
-       _EditPresenter::SetFont(*(pToken->pFont));
+
+       __editContentFontSize = GetTextSize();
+       _EditPresenter::SetTextSize(tokenFontSize);
 
        SetTextBounds(tempTextDspRect);
 
@@ -2192,7 +2172,7 @@ _TokenEditPresenter::ProcessTokeningByTouchEvent(const _Control& source, const _
 
                        __isEditingToken = false;
                        __edittingTokenIndex = -1;
-                       _EditPresenter::SetDefaultFont();
+                       _EditPresenter::SetTextSize(__editContentFontSize);
                        __isTokenEditingFinished = false;
 
                        ClearText();
@@ -2662,6 +2642,38 @@ _TokenEditPresenter::SetFlexBounds(const FloatRectangle& bounds)
        return _EditPresenter::SetFlexBounds(bounds);
 }
 
+result
+_TokenEditPresenter::SetTextSize(const int size)
+{
+       result r = E_SUCCESS;
+       if (__isEditingToken)
+       {
+               __editContentFontSize = size;
+       }
+       else
+       {
+               r = _EditPresenter::SetTextSize(size);
+       }
+
+       return r;
+}
+
+result
+_TokenEditPresenter::SetTextSize(const float size)
+{
+       result r = E_SUCCESS;
+       if (__isEditingToken)
+       {
+               __editContentFontSize = size;
+       }
+       else
+       {
+               r = _EditPresenter::SetTextSize(size);
+       }
+
+       return r;
+}
+
 bool
 _TokenEditPresenter::OnTouchPressed(const _Control& source, const _TouchInfo& touchinfo)
 {
@@ -2973,7 +2985,7 @@ _TokenEditPresenter::OnSurroundingTextDeleted(int offset, int charCount)
                                __pressedTokenIndex = -1;
                                __edittingTokenIndex = -1;
                                __isEditingToken = false;
-                               _EditPresenter::SetDefaultFont();
+                               _EditPresenter::SetTextSize(__editContentFontSize);
                                __isTokenEditingFinished = false;
 
                                AdjustFlexibleHeight();
index 35de054..ae22665 100644 (file)
@@ -167,8 +167,8 @@ public:
        result SetEllipsisPosition(EllipsisPosition position);
        virtual result SetFlexBounds(const Tizen::Graphics::Rectangle& bounds);
        virtual result SetFlexBounds(const Tizen::Graphics::FloatRectangle& bounds);
-       result SetTextSize(const int size);
-       result SetTextSize(const float size);
+       virtual result SetTextSize(const int size);
+       virtual result SetTextSize(const float size);
        result SetFont(const Tizen::Graphics::Font& font);
        result AdjustFont(Tizen::Graphics::Font& font, _EditFontChange fontChange = EDIT_FONT_CHANGE_CONTENT);
        result SetFontType(const Tizen::Base::String& typefaceName, unsigned long styleMask);
@@ -305,7 +305,6 @@ public:
        bool GetCursorChangedFlag(void) const;
        void SetAutoShrinkModeEnabled(bool enable);
        bool IsAutoShrinkModeEnabled(void) const;
-       result SetDefaultFont(void);
        void SetEditGroupStyle(GroupStyle groupStyle);
        void ScrollPanelToCursorPosition(bool show = true);
        void SetSearchBarFlag(bool enabled);
index 3a30fd8..c1f675a 100644 (file)
@@ -132,6 +132,8 @@ public:
        virtual bool OnFocusLost(void);
 
        virtual result SetFlexBounds(const Tizen::Graphics::FloatRectangle& bounds);
+       virtual result SetTextSize(const int size);
+       virtual result SetTextSize(const float size);
 
        // Touch callbacks
        virtual bool OnTouchPressed(const _Control& source, const _TouchInfo& touchinfo);
@@ -203,8 +205,6 @@ private:
 
        Tizen::Graphics::FloatRectangle __descriptionTextRect;
 
-       Tizen::Graphics::Font* __pDescriptionTextFont;
-
        bool __isTokenEditingFinished;
 
        float __prevScrollValue;
@@ -255,6 +255,8 @@ private:
 
        Tizen::Graphics::Point __touchPressInfo;
 
+       int __editContentFontSize;
+
 
 };     // _TokenEditPresenter