Modified EnrichedText Clone
authorYunji Park <yunji19.park@samsung.com>
Tue, 18 Jun 2013 12:25:56 +0000 (21:25 +0900)
committerYunji Park <yunji19.park@samsung.com>
Tue, 18 Jun 2013 12:29:00 +0000 (21:29 +0900)
Change-Id: I41d5a48cd2d8f0e787a9ec21c16b22c084aa2002

src/graphics/FGrp_EnrichedTextImpl.cpp
src/graphics/inc/FGrp_EnrichedTextImpl.h
src/graphics/inc/FGrp_TextTextCutLink.h

index 42f10e0..6ea5f63 100644 (file)
@@ -48,6 +48,7 @@ _EnrichedTextImpl::_EnrichedTextImpl(void)
        __verticalAlignment = TEXT_ALIGNMENT_VERTICAL_MIN;
        __horizontalAlignment = TEXT_ALIGNMENT_HORIZONTAL_MIN;
        __elementVerticalAlignment = TEXT_ALIGNMENT_VERTICAL_MIN;
+       __pTextObject = null;
        __pLinkedListTextElementList = null;
        __pTextElement = null;
        __isCopiedEnrichedText = false;
@@ -72,6 +73,12 @@ _EnrichedTextImpl::~_EnrichedTextImpl(void)
                delete __pLinkedListTextElementList;
                __pLinkedListTextElementList = null;
        }
+
+       if (__pTextObject)
+       {
+               delete __pTextObject;
+               __pTextObject = null;
+       }
 }
 
 result
@@ -95,19 +102,16 @@ _EnrichedTextImpl::Construct(const Tizen::Graphics::FloatDimension& dim)
        __lineSpace = 0.0f;
 
        __pLinkedListTextElementList = new (std::nothrow) Tizen::Base::Collection::LinkedList;
-       SysTryCatch(NID_GRP
-                       , __pLinkedListTextElementList
-                       , r = E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, "[%s] Fails to create a element list.", GetErrorMessage(r));
+       SysTryCatch(NID_GRP, __pLinkedListTextElementList, r = E_OUT_OF_MEMORY, E_OUT_OF_MEMORY
+                       , "[%s] Fails to create a element list.", GetErrorMessage(r));
 
        __pTextElement = new (std::nothrow) TextElement();
-       SysTryCatch(NID_GRP
-                       , __pTextElement
-                       , r = E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, "[%s] Fails to create a element.", GetErrorMessage(r));
+       SysTryCatch(NID_GRP, __pTextElement, r = E_OUT_OF_MEMORY, E_OUT_OF_MEMORY
+                       , "[%s] Fails to create a element.", GetErrorMessage(r));
 
-       __pTextObject.reset(new (std::nothrow)TextObject);
-       SysTryCatch(NID_GRP
-                       , __pTextObject
-                       , r = E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, "[%s] Fails to create a TextObject.", GetErrorMessage(r));
+       __pTextObject = new (std::nothrow)TextObject;
+       SysTryCatch(NID_GRP, __pTextObject, r = E_OUT_OF_MEMORY, E_OUT_OF_MEMORY
+                       , "[%s] Fails to create a TextObject.", GetErrorMessage(r));
 
        __pTextObject->Construct();
        __pTextObject->SetBounds(FloatRectangle(0.0f, 0.0f, __width, __height));
@@ -200,11 +204,6 @@ _EnrichedTextImpl::RemoveAt(int elementIndex, bool deallocate)
                        , E_INVALID_ARG, E_INVALID_ARG
                        , "[E_INVALID_ARG] The argument is invalid.");
 
-       if (__pTextObject.use_count() > 1)
-       {
-               return E_SUCCESS;
-       }
-
        result r = E_SUCCESS;
        int count = GetTextElementCount();
        TextElement* pTextElement = null;
@@ -249,11 +248,6 @@ _EnrichedTextImpl::Remove(Tizen::Graphics::TextElement& element, bool deallocate
        SysTryReturn(NID_GRP, __pTextObject != null, E_OPERATION_FAILED, E_OPERATION_FAILED
                        , "[E_OPERATION_FAILED] This instance is not constructed yet.");
 
-       if (__pTextObject.use_count() > 1)
-       {
-               return E_SUCCESS;
-       }
-
        int textElementIndex = 0;
        result r = E_SUCCESS;
        TextElement* pTextElement = null;
@@ -285,7 +279,8 @@ _EnrichedTextImpl::Remove(Tizen::Graphics::TextElement& element, bool deallocate
 result
 _EnrichedTextImpl::Add(Tizen::Graphics::TextElement& element)
 {
-       SysTryReturn(NID_GRP, __pTextObject != null, E_OPERATION_FAILED, E_OPERATION_FAILED, "[E_OPERATION_FAILED] This instance is not constructed yet.");
+       SysTryReturn(NID_GRP, __pTextObject != null, E_OPERATION_FAILED, E_OPERATION_FAILED
+                       , "[E_OPERATION_FAILED] This instance is not constructed yet.");
 
        result r = E_SUCCESS;
 
@@ -325,7 +320,8 @@ _EnrichedTextImpl::Add(Tizen::Graphics::TextElement& element)
 result
 _EnrichedTextImpl::RemoveAllTextElements(bool deallocate)
 {
-       SysTryReturn(NID_GRP, __pTextObject != null, E_OPERATION_FAILED, E_OPERATION_FAILED, "[E_OPERATION_FAILED] This instance is not constructed yet.");
+       SysTryReturn(NID_GRP, __pTextObject != null, E_OPERATION_FAILED, E_OPERATION_FAILED
+                       , "[E_OPERATION_FAILED] This instance is not constructed yet.");
 
        result r = E_SUCCESS;
        int elementCount = __pLinkedListTextElementList->GetCount();
@@ -347,7 +343,8 @@ _EnrichedTextImpl::RemoveAllTextElements(bool deallocate)
 result
 _EnrichedTextImpl::RemoveAll(bool deallocate)
 {
-       SysTryReturn(NID_GRP, __pTextObject != null, E_OPERATION_FAILED, E_OPERATION_FAILED, "[E_OPERATION_FAILED] This instance is not constructed yet.");
+       SysTryReturn(NID_GRP, __pTextObject != null, E_OPERATION_FAILED, E_OPERATION_FAILED
+                       , "[E_OPERATION_FAILED] This instance is not constructed yet.");
 
        result r = E_SUCCESS;
 
@@ -655,7 +652,7 @@ _EnrichedTextImpl::SetLineSpace(int lineSpace)
 {
        SysTryReturn(NID_GRP, __pTextObject != null, E_OPERATION_FAILED, E_OPERATION_FAILED
                        , "[E_OPERATION_FAILED] This instance is not constructed yet.");
-       SysTryReturn(NID_GRP, lineSpace > 0, E_INVALID_ARG, E_INVALID_ARG
+       SysTryReturn(NID_GRP, lineSpace >= 0, E_INVALID_ARG, E_INVALID_ARG
                        , "[E_INVALID_ARG] The argument is invalid.");
 
        __lineSpace = _CoordinateSystemUtils::ConvertToFloat(lineSpace);
@@ -669,7 +666,7 @@ _EnrichedTextImpl::SetLineSpace(float lineSpace)
 {
        SysTryReturn(NID_GRP, __pTextObject != null, E_OPERATION_FAILED, E_OPERATION_FAILED
                        , "[E_OPERATION_FAILED] This instance is not constructed yet.");
-       SysTryReturn(NID_GRP, lineSpace > 0.0f, E_INVALID_ARG, E_INVALID_ARG
+       SysTryReturn(NID_GRP, lineSpace >= 0.0f, E_INVALID_ARG, E_INVALID_ARG
                        , "[E_INVALID_ARG] The argument is invalid.");
 
        __lineSpace = lineSpace;
@@ -1056,17 +1053,13 @@ _EnrichedTextImpl::Add(const Tizen::Graphics::Bitmap& bitmap)
        }
 
        r = pNewBitmap->Construct(*pBitmap, FloatRectangle(0, 0, pBitmap->GetWidthF(), pBitmap->GetHeightF()));
-       SysTryCatch(NID_GRP
-                       , r == E_SUCCESS
-                       , , r, "[%s] Fails to append image.", GetErrorMessage(r));
+       SysTryCatch(NID_GRP, r == E_SUCCESS, , r, "[%s] Fails to append image.", GetErrorMessage(r));
 
        __pTextObject->AppendElement(*pNewBitmap, TEXT_ELEMENT_SOURCE_TYPE_EXTERNAL);
        __pTextObject->Compose();
 
        r = __pLinkedListTextElementList->Add(*pNewBitmap);
-       SysTryCatch(NID_GRP
-                       , r == E_SUCCESS
-                       , , r, "[%s] Fails to add image.", GetErrorMessage(r));
+       SysTryCatch(NID_GRP, r == E_SUCCESS, , r, "[%s] Fails to add image.", GetErrorMessage(r));
 
        if (__isCopiedEnrichedText == false)
        {
@@ -1318,7 +1311,7 @@ _EnrichedTextImpl::GetTextElementIndexFromPosition(Tizen::Graphics::FloatPoint&
 TextObject*
 _EnrichedTextImpl::GetTextObject(void) const
 {
-       return __pTextObject.get();
+       return __pTextObject;
 }
 
 TextElementType
@@ -1574,58 +1567,126 @@ _EnrichedTextImpl::GetCloneN(void) const
                        , "[E_OPERATION_FAILED] This instance is not constructed yet.");
 
        result r = E_SUCCESS;
+
        _EnrichedTextImpl* pNewEnrichedTextImpl = null;
+       TextElement* pNewElement = null;
+       TextElement* pSrcElement = null;
+       Bitmap* pBitmap = null;
+       Font* pFont = null;
+       Color bgColor;
+       Color fgColor;
+       Color outColor;
+       TextElementType type = TEXT_ELEMENT_TYPE_NONE;
 
-       pNewEnrichedTextImpl = new (std::nothrow)_EnrichedTextImpl(*this);
-       r = GetLastResult();
-       SysTryReturn(NID_GRP, pNewEnrichedTextImpl, null, r, "[%s] Propagating.", GetErrorMessage(r));
+       Dimension dim = this->GetSize();
+       TextVerticalAlignment verticalAlignment = this->GetElementVerticalAlignment();
+       TextHorizontalAlignment horizontalAlignment = this->GetHorizontalAlignment();
+       TextVerticalAlignment elementVerticalAlignment = this->GetElementVerticalAlignment();
+       TextWrap wrap = this->GetTextWrapStyle();
+       bool abbreviationEnable = this->IsTextAbbreviationEnabled();
+       float lineSpacing = this->GetLineSpaceF();
+       int elementCount = this->GetTextElementCount();
+
+       pNewEnrichedTextImpl = new (std::nothrow)_EnrichedTextImpl();
+       SysTryReturn(NID_GRP, pNewEnrichedTextImpl, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Fail to create a EnrichedTextImpl.");
+
+       r = pNewEnrichedTextImpl->Construct(dim);
+       SysTryCatch(NID_GRP, r == E_SUCCESS, , E_SYSTEM, "[E_SYSTEM] Failed to duplicate the EnrichedTextImpl.");
+
+       pNewEnrichedTextImpl->__isCopiedEnrichedText = true;
+       pNewEnrichedTextImpl->SetVerticalAlignment(verticalAlignment);
+       pNewEnrichedTextImpl->SetHorizontalAlignment(horizontalAlignment);
+       pNewEnrichedTextImpl->SetElementVerticalAlignment(elementVerticalAlignment);
+       pNewEnrichedTextImpl->SetTextWrapStyle(wrap);
+       pNewEnrichedTextImpl->SetTextAbbreviationEnabled(abbreviationEnable);
+       pNewEnrichedTextImpl->SetLineSpace(lineSpacing);
 
-       return pNewEnrichedTextImpl;
-}
+       for (int i = 0; i < elementCount; i++)
+       {
+               if (this->GetTextElementAt(i) == null) // For Bitmap
+               {
+                       type = (this->GetTypeFromIndex(i));
+                       if (type == TEXT_ELEMENT_TYPE_IMAGE)
+                       {
+                               pBitmap = (Bitmap*)(this->__pLinkedListTextElementList->GetAt(i));
+                               SysTryCatch(NID_GRP, pBitmap != null, , E_SYSTEM, "[E_SYSTEM] Failed to duplicate the EnrichedTextImpl.");
 
-_EnrichedTextImpl::_EnrichedTextImpl(const _EnrichedTextImpl& rhs)
-{
-       SysTryReturnVoidResult(NID_GRP, rhs.__pTextObject, E_OPERATION_FAILED, "[E_OPERATION_FAILED] This instance is not initialized.");
+                               r = pNewEnrichedTextImpl->Add(*pBitmap);
+                               SysTryCatch(NID_GRP, r == E_SUCCESS, , E_SYSTEM, "[E_SYSTEM] Failed to duplicate the EnrichedTextImpl.");
+                       }
+               }
+               else    // For TextElement
+               {
+                       pNewElement = new (std::nothrow) TextElement();
+                       SysTryCatch(NID_GRP, pNewElement, , E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Fail to create a TextElement.");
 
-       result r = E_SUCCESS;
-       FloatDimension size = rhs.GetSizeF();
+                       pSrcElement = (TextElement*)(this->__pLinkedListTextElementList->GetAt(i));
+                       SysTryCatch(NID_GRP, pSrcElement, , E_SYSTEM, "[E_SYSTEM] Failed to duplicate the EnrichedTextImpl.");
 
-       __width = size.width;
-       __height = size.height;
-       __lineSpace = GetLineSpaceF();
-       __count = 0;
-       __verticalAlignment = rhs.GetVerticalAlignment();
-       __horizontalAlignment = rhs.GetHorizontalAlignment();
-       __elementVerticalAlignment = rhs.GetElementVerticalAlignment();
-       __pLinkedListTextElementList = null;
-       __pTextElement = null;
-       __isCopiedEnrichedText = true;
-       __pTextObject = rhs.__pTextObject;
+                       bgColor = pSrcElement->GetBackgroundColor();
+                       fgColor = pSrcElement->GetTextColor();
+                       outColor = pSrcElement->GetOutlineColor();
+                       _TextElementImpl* pSrcTextElementImpl = _TextElementImpl::GetInstance(*pSrcElement);
 
-       __pLinkedListTextElementList = new (std::nothrow) Tizen::Base::Collection::LinkedList;
-       if (__pLinkedListTextElementList == null)
-       {
-               SetLastResult(E_OUT_OF_MEMORY);
-               SysLog(NID_GRP, "[E_OUT_OF_MEMORY] Fail to create element list.");
-       }
+                       if (pSrcElement->GetLinkType() == LINK_TYPE_NONE)
+                       {
+                               r = pNewElement->Construct(pSrcElement->GetText());
+                               SysTryCatch(NID_GRP, r == E_SUCCESS, , E_SYSTEM, "[E_SYSTEM] Failed to duplicate the EnrichedTextImpl.");
+                       }
+                       else
+                       {
+                               if (pSrcTextElementImpl->IsAuto() == true)
+                               {
+                                       r = pNewElement->Construct(pSrcElement->GetText(), pSrcTextElementImpl->GetAutoLink());
+                                       SysTryCatch(NID_GRP, r == E_SUCCESS, , E_SYSTEM, "[E_SYSTEM] Failed to duplicate the EnrichedTextImpl.");
+                               }
+                               else
+                               {
+                                       r = pNewElement->Construct(pSrcElement->GetText(), pSrcElement->GetLinkType(), pSrcElement->GetLink());
+                                       SysTryCatch(NID_GRP, r == E_SUCCESS, , E_SYSTEM, "[E_SYSTEM] Failed to duplicate the EnrichedTextImpl.");
+                               }
+                       }
 
-       __pTextElement = new (std::nothrow) TextElement();
-       if (__pTextElement == null)
-       {
-               delete __pLinkedListTextElementList;
+                       pNewElement->SetTextColor(fgColor);
+                       if (pSrcTextElementImpl->IsBackgoundColorEnable() == true)
+                       {
+                               pNewElement->SetBackgroundColor(bgColor);
+                       }
 
-               SetLastResult(E_OUT_OF_MEMORY);
-               SysLog(NID_GRP, "[E_OUT_OF_MEMORY] Fail to create element.");
+                       if (pSrcTextElementImpl->IsOutlineColorEnable() == true)
+                       {
+                               pNewElement->SetOutlineColor(outColor);
+                       }
+
+                       pFont = const_cast < Font* >(pSrcTextElementImpl->GetFont());
+                       if (pFont != null)
+                       {
+                               r = pNewElement->SetFont(*pFont);
+                               SysTryCatch(NID_GRP, r == E_SUCCESS, , E_SYSTEM, "[E_SYSTEM] Failed to duplicate the EnrichedTextImpl.");
+                       }
+
+                       r = pNewEnrichedTextImpl->Add(*pNewElement);
+                       SysTryCatch(NID_GRP, r == E_SUCCESS, , E_SYSTEM, "[E_SYSTEM] Failed to duplicate the EnrichedTextImpl.");
+               }
        }
 
-       r = __pTextElement->Construct();
-       if (r != E_SUCCESS)
+       return pNewEnrichedTextImpl;
+
+CATCH:
+       if (pNewEnrichedTextImpl)
        {
-               delete __pLinkedListTextElementList;
-               delete __pTextElement;
+               pNewEnrichedTextImpl->RemoveAll(true);
+               delete pNewEnrichedTextImpl;
+               pNewEnrichedTextImpl = null;
+       }
 
-               SysLog(NID_GRP, "[%s] Fail to construct text element.", GetErrorMessage(r));
+       if (pNewElement)
+       {
+               delete pNewElement;
+               pNewElement = null;
        }
+
+       return null;
 }
 
 _EnrichedTextImpl*
index 54e9180..7cef38d 100644 (file)
 #ifndef _FGRP_INTERNAL_ENRICHED_TEXT_IMPL_H_
 #define _FGRP_INTERNAL_ENRICHED_TEXT_IMPL_H_
 
-
-#include <memory>
-#include <tr1/memory>
-
 #include <FBaseErrorDefine.h>
 #include <FBaseString.h>
 #include <FBaseColArrayList.h>
@@ -170,7 +166,7 @@ private:
        TextHorizontalAlignment __horizontalAlignment;
        TextVerticalAlignment __elementVerticalAlignment;
 
-       std::tr1::shared_ptr<Tizen::Graphics::_Text::TextObject> __pTextObject;
+       Tizen::Graphics::_Text::TextObject* __pTextObject;
        Tizen::Base::Collection::LinkedList* __pLinkedListTextElementList;
        Tizen::Base::Collection::ArrayList __elements;
        TextElement* __pTextElement;
index 132dd45..d240aeb 100644 (file)
@@ -47,7 +47,7 @@ class _OSP_EXPORT_ TextCutLink
 public:
        TextCutLink(bool isEditable, Tizen::Base::Utility::LinkType cutLinkType, const wchar_t* pText, int length,
                        TextElementSourceType sourceType = TEXT_ELEMENT_SOURCE_TYPE_INTERNAL, Font* pFont = null,
-                       const Color& foregroundColor = 0, const Color& backgroundColor = 0, const Color& outlineColor = 0);
+                       const Color& foregroundColor = Color::GetColor(COLOR_ID_BLACK), const Color& backgroundColor = Color::GetColor(COLOR_ID_WHITE), const Color& outlineColor = 0);
 
        virtual ~TextCutLink(void);