From 33cdb30537a9a5f9dcfe9abbbf837ae7f989670f Mon Sep 17 00:00:00 2001 From: Saravana Balaji Date: Mon, 25 Mar 2013 17:43:38 +0530 Subject: [PATCH] Memory Leak fixes and Font changes Change-Id: Ife1ac6c23399c91072c2098aa273302f92c31432 Signed-off-by: Saravana Balaji --- src/ui/controls/FUiCtrl_EditPresenter.cpp | 22 ---- src/ui/controls/FUiCtrl_TokenEditPresenter.cpp | 138 ++++++++++++++----------- src/ui/inc/FUiCtrl_EditPresenter.h | 5 +- src/ui/inc/FUiCtrl_TokenEditPresenter.h | 6 +- 4 files changed, 81 insertions(+), 90 deletions(-) diff --git a/src/ui/controls/FUiCtrl_EditPresenter.cpp b/src/ui/controls/FUiCtrl_EditPresenter.cpp index 162b9e7..6af14ba 100755 --- a/src/ui/controls/FUiCtrl_EditPresenter.cpp +++ b/src/ui/controls/FUiCtrl_EditPresenter.cpp @@ -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) { diff --git a/src/ui/controls/FUiCtrl_TokenEditPresenter.cpp b/src/ui/controls/FUiCtrl_TokenEditPresenter.cpp index 4cbcf58..c910c53 100755 --- a/src/ui/controls/FUiCtrl_TokenEditPresenter.cpp +++ b/src/ui/controls/FUiCtrl_TokenEditPresenter.cpp @@ -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(); diff --git a/src/ui/inc/FUiCtrl_EditPresenter.h b/src/ui/inc/FUiCtrl_EditPresenter.h index 35de054..ae22665 100644 --- a/src/ui/inc/FUiCtrl_EditPresenter.h +++ b/src/ui/inc/FUiCtrl_EditPresenter.h @@ -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); diff --git a/src/ui/inc/FUiCtrl_TokenEditPresenter.h b/src/ui/inc/FUiCtrl_TokenEditPresenter.h index 3a30fd8..c1f675a 100644 --- a/src/ui/inc/FUiCtrl_TokenEditPresenter.h +++ b/src/ui/inc/FUiCtrl_TokenEditPresenter.h @@ -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 -- 2.7.4