add patch
[framework/osp/uifw.git] / src / ui / controls / FUiCtrl_ButtonPresenter.cpp
index a375d82..2a54959 100644 (file)
@@ -53,7 +53,7 @@ _ButtonPresenter::_ButtonPresenter(void)
        , __fontSize(0.0f)
        , __pTextSlideTimer(null)
        , __textRect(FloatRectangle(0.0f, 0.0f, 0.0f, 0.0f))
-       , __pTabLargeSelectedBitmap(null)
+       , __pTextSlideClippedBitmap(null)
 {
 
 }
@@ -78,10 +78,10 @@ _ButtonPresenter::~_ButtonPresenter(void)
                __pTextSlideTimer = null;
        }
 
-       if (__pTabLargeSelectedBitmap)
+       if (__pTextSlideClippedBitmap)
        {
-               delete __pTabLargeSelectedBitmap;
-               __pTabLargeSelectedBitmap = null;
+               delete __pTextSlideClippedBitmap;
+               __pTextSlideClippedBitmap = null;
        }
 }
 
@@ -155,11 +155,6 @@ _ButtonPresenter::InitTextObject(void)
        float rightMargin = __pButton->GetRightMarginF();
        float bottomMargin = __pButton->GetBottomMarginF();
 
-       float leftTouchMargin = __pButton->GetLeftTouchMarginF();
-       float topTouchMargin = __pButton->GetTopTouchMarginF();
-       float rightTouchMargin = __pButton->GetRightTouchMarginF();
-       float bottomTouchMargin = __pButton->GetBottomTouchMarginF();
-
        __pTextObject->RemoveAll(true);
 
        pSimpleText = new (std::nothrow) TextSimple(const_cast<wchar_t*>(__pButton->GetText().GetPointer()), __pButton->GetText().GetLength());
@@ -171,9 +166,9 @@ _ButtonPresenter::InitTextObject(void)
        SetTextSize(__pButton->GetTextSizeF());
        __pTextObject->SetFont(__pFont, 0, __pTextObject->GetTextLength());
        __pTextObject->SetAlignment(TEXT_OBJECT_ALIGNMENT_CENTER | TEXT_OBJECT_ALIGNMENT_MIDDLE);
-       __pTextObject->SetBounds(FloatRectangle(leftMargin + leftTouchMargin, topMargin + topTouchMargin,
-                       __pButton->GetBoundsF().width - (leftMargin + rightMargin) - (leftTouchMargin + rightTouchMargin),
-                       __pButton->GetBoundsF().height - (topMargin + bottomMargin) - (topTouchMargin + bottomTouchMargin)));
+       __pTextObject->SetBounds(FloatRectangle(leftMargin, topMargin,
+                       __pButton->GetBoundsF().width - (leftMargin + rightMargin),
+                       __pButton->GetBoundsF().height - (topMargin + bottomMargin)));
        __pTextObject->Compose();
 
        return E_SUCCESS;
@@ -295,7 +290,11 @@ _ButtonPresenter::Draw(void)
                DrawBackground();
        }
 
-       DrawSubTitleEffectBitmap();
+       if (__pButton->GetSubTitleEffectBitmap() != null)
+       {
+               DrawSubTitleEffectBitmap();
+       }
+
        DrawBitmap();
 
        if (!__pButton->GetText().IsEmpty())
@@ -324,13 +323,8 @@ _ButtonPresenter::DrawBackground(void)
        Color bgColor = __pButton->GetBackgroundColor();
        String imagePath = L"";
 
-       float leftTouchMargin = __pButton->GetLeftTouchMarginF();
-       float topTouchMargin = __pButton->GetTopTouchMarginF();
-       float rightTouchMargin = __pButton->GetRightTouchMarginF();
-       float bottomTouchMargin = __pButton->GetBottomTouchMarginF();
-
-       FloatRectangle bounds(leftTouchMargin, topTouchMargin, __pButton->GetBoundsF().width - (leftTouchMargin + rightTouchMargin)
-                       , __pButton->GetBoundsF().height - (topTouchMargin + bottomTouchMargin));
+       FloatRectangle bounds(0, 0, __pButton->GetBoundsF().width,
+                       __pButton->GetBoundsF().height);
 
        _ButtonStatus status = __pButton->GetButtonStatus();
 
@@ -659,18 +653,12 @@ _ButtonPresenter::DrawToolbarItemBackground(void)
        pCanvas->SetBackgroundColor(Color(0, 0, 0, 0));
        pCanvas->Clear();
 
-       float leftTouchMargin = __pButton->GetLeftTouchMarginF();
-       float topTouchMargin = __pButton->GetTopTouchMarginF();
-       float rightTouchMargin = __pButton->GetRightTouchMarginF();
-       float bottomTouchMargin = __pButton->GetBottomTouchMarginF();
-
        _ButtonStatus status = __pButton->GetButtonStatus();
        Bitmap* pToolbarItemBackgroundBitmap = __pButton->GetToolbarItemBackgroundBitmap(status);
 
        if (pToolbarItemBackgroundBitmap)
        {
-               FloatRectangle bounds(leftTouchMargin, topTouchMargin, __pButton->GetBoundsF().width - (leftTouchMargin + rightTouchMargin),
-                               __pButton->GetBoundsF().height - (topTouchMargin + bottomTouchMargin));
+               FloatRectangle bounds(0, 0, __pButton->GetBoundsF().width, __pButton->GetBoundsF().height);
 
                if (_BitmapImpl::CheckNinePatchedBitmapStrictly(*pToolbarItemBackgroundBitmap))
                {
@@ -683,23 +671,6 @@ _ButtonPresenter::DrawToolbarItemBackground(void)
                }
        }
 
-       if (__pTabLargeSelectedBitmap)
-       {
-               delete __pTabLargeSelectedBitmap;
-               __pTabLargeSelectedBitmap = null;
-       }
-
-       __pTabLargeSelectedBitmap = new (std::nothrow) Bitmap();
-
-       if (__pButton->UserDefinedText())
-       {
-               __pTabLargeSelectedBitmap->Construct(*pCanvas, __pButton->GetUserDefinedTextAreaF());
-       }
-       else
-       {
-               __pTabLargeSelectedBitmap->Construct(*pCanvas, __textRect);
-       }
-
        delete pCanvas;
 
        return;
@@ -718,13 +689,7 @@ _ButtonPresenter::DrawBitmap(void)
        Bitmap* pEffectBitmap = __pButton->GetEffectBitmap(status);
        Bitmap* pNormalEffectBitmap = __pButton->GetEffectBitmap(_BUTTON_STATUS_NORMAL);
 
-       float leftTouchMargin = __pButton->GetLeftTouchMarginF();
-       float topTouchMargin = __pButton->GetTopTouchMarginF();
-       float rightTouchMargin = __pButton->GetRightTouchMarginF();
-       float bottomTouchMargin = __pButton->GetBottomTouchMarginF();
-
-       FloatRectangle bounds(leftTouchMargin, topTouchMargin, __pButton->GetBoundsF().width - (leftTouchMargin + rightTouchMargin),
-                       __pButton->GetBoundsF().height - (topTouchMargin + bottomTouchMargin));
+       FloatRectangle bounds(0, 0, __pButton->GetBoundsF().width, __pButton->GetBoundsF().height);
 
        if (pBitmap)
        {
@@ -736,8 +701,8 @@ _ButtonPresenter::DrawBitmap(void)
                        return;
                }
 
-               if (__pButton->GetSizeF().width - __pButton->GetBitmapPositionF(status).x - rightTouchMargin < pBitmap->GetWidthF()
-                               || __pButton->GetSizeF().height - __pButton->GetBitmapPositionF(status).y - bottomTouchMargin < pBitmap->GetHeightF())
+               if (__pButton->GetSizeF().width - __pButton->GetBitmapPositionF(status).x < pBitmap->GetWidthF()
+                               || __pButton->GetSizeF().height - __pButton->GetBitmapPositionF(status).y < pBitmap->GetHeightF())
                {
                        pCanvas->DrawBitmap(bounds, *pBitmap, FloatRectangle(0.0f, 0.0f, pBitmap->GetWidthF(), pBitmap->GetHeightF()));
 
@@ -767,8 +732,8 @@ _ButtonPresenter::DrawBitmap(void)
                        return;
                }
 
-               if (__pButton->GetSizeF().width - __pButton->GetBitmapPositionF(_BUTTON_STATUS_NORMAL).x - rightTouchMargin < pNormalBitmap->GetWidthF()
-                               || __pButton->GetSizeF().height - __pButton->GetBitmapPositionF(_BUTTON_STATUS_NORMAL).y - bottomTouchMargin < pNormalBitmap->GetHeightF())
+               if (__pButton->GetSizeF().width - __pButton->GetBitmapPositionF(_BUTTON_STATUS_NORMAL).x < pNormalBitmap->GetWidthF()
+                               || __pButton->GetSizeF().height - __pButton->GetBitmapPositionF(_BUTTON_STATUS_NORMAL).y < pNormalBitmap->GetHeightF())
                {
                        pCanvas->DrawBitmap(bounds, *pNormalBitmap, FloatRectangle(0.0f, 0.0f, pNormalBitmap->GetWidthF(), pNormalBitmap->GetHeightF()));
 
@@ -796,7 +761,7 @@ _ButtonPresenter::DrawBitmap(void)
 void
 _ButtonPresenter::DrawText(void)
 {
-       TimerForTitleSlideInit();
+       TimerForTextSlideInit();
        //TextSimple* pSimpleText = null;
        TextObjectAlignment horizontalAlign = TEXT_OBJECT_ALIGNMENT_CENTER;
        TextObjectAlignment verticalAlign = TEXT_OBJECT_ALIGNMENT_MIDDLE;
@@ -806,11 +771,6 @@ _ButtonPresenter::DrawText(void)
        float rightMargin = __pButton->GetRightMarginF();
        float bottomMargin = __pButton->GetBottomMarginF();
 
-       float leftTouchMargin = __pButton->GetLeftTouchMarginF();
-       float topTouchMargin = __pButton->GetTopTouchMarginF();
-       float rightTouchMargin = __pButton->GetRightTouchMarginF();
-       float bottomTouchMargin = __pButton->GetBottomTouchMarginF();
-
        Canvas* pCanvas = __pButton->GetCanvasN();
        if (pCanvas == null)
        {
@@ -846,9 +806,9 @@ _ButtonPresenter::DrawText(void)
        //pSimpleText = new (std::nothrow) TextSimple(const_cast<wchar_t*>(__pButton->GetText().GetPointer()), __pButton->GetText().GetLength());
        //__pTextObject->AppendElement(*pSimpleText);
 
-       __textRect = FloatRectangle(leftMargin + leftTouchMargin, topMargin + topTouchMargin,
-                       __pButton->GetBoundsF().width - (leftMargin + rightMargin) - (leftTouchMargin + rightTouchMargin),
-                       __pButton->GetBoundsF().height - (topMargin + bottomMargin) - (topTouchMargin + bottomTouchMargin));
+       __textRect = FloatRectangle(leftMargin, topMargin,
+                       __pButton->GetBoundsF().width - (leftMargin + rightMargin),
+                       __pButton->GetBoundsF().height - (topMargin + bottomMargin));
 
        if (__pButton->UserDefinedText())
        {
@@ -859,6 +819,23 @@ _ButtonPresenter::DrawText(void)
                __pTextObject->SetBounds(__textRect);
        }
 
+       if (__pTextSlideClippedBitmap)
+       {
+               delete __pTextSlideClippedBitmap;
+               __pTextSlideClippedBitmap = null;
+       }
+
+       __pTextSlideClippedBitmap = new (std::nothrow) Bitmap();
+
+       if (__pButton->UserDefinedText())
+       {
+               __pTextSlideClippedBitmap->Construct(*pCanvas, __pButton->GetUserDefinedTextAreaF());
+       }
+       else
+       {
+               __pTextSlideClippedBitmap->Construct(*pCanvas, __textRect);
+       }
+
        __pTextObject->SetAlignment(horizontalAlign | verticalAlign);
 
        if (__pButton->GetButtonStatus() == _BUTTON_STATUS_SELECTED && __pButton->IsTabTextSlide())
@@ -870,6 +847,7 @@ _ButtonPresenter::DrawText(void)
                __pTextObject->SetAction(TEXT_OBJECT_ACTION_TYPE_ABBREV);
        }
 
+       SetTextSize(__pButton->GetTextSizeF());
        __pTextObject->SetFont(__pFont, 0, __pTextObject->GetTextLength());
        __pTextObject->Compose();
 
@@ -892,7 +870,7 @@ _ButtonPresenter::DrawText(void)
 
                DrawTabTextDimBitmap();
 
-               TimerForTitleSlideStart();
+               TimerForTextSlideStart();
        }
        else
        {
@@ -912,10 +890,6 @@ _ButtonPresenter::DrawUnderlineBitmap(void)
        float selectedBitmapHeight = 0.0f;
        float segmentedHeight = 0.0f;
 
-       float leftTouchMargin = __pButton->GetLeftTouchMarginF();
-       float rightTouchMargin = __pButton->GetRightTouchMarginF();
-       float bottomTouchMargin = __pButton->GetBottomTouchMarginF();
-
        GET_SHAPE_CONFIG(HEADER::HEADER_ITEM_SELECTED_BITMAP_MARGIN, __pButton->GetOrientation(), selectedBitmapMargin);
        GET_SHAPE_CONFIG(HEADER::HEADER_ITEM_SELECTED_BITMAP_HEIGHT, __pButton->GetOrientation(), selectedBitmapHeight);
        GET_SHAPE_CONFIG(HEADER::SEGMENTED_ITEM_HEIGHT, __pButton->GetOrientation(), segmentedHeight);
@@ -932,9 +906,9 @@ _ButtonPresenter::DrawUnderlineBitmap(void)
                        return;
                }
 
-               FloatRectangle bounds(selectedBitmapMargin + leftTouchMargin,
-                               __pButton->GetBoundsF().height -  bottomTouchMargin - selectedBitmapHeight,
-                               __pButton->GetBoundsF().width - selectedBitmapMargin * 2 - (leftTouchMargin + rightTouchMargin), selectedBitmapHeight + 1);
+               FloatRectangle bounds(selectedBitmapMargin,
+                               __pButton->GetBoundsF().height - selectedBitmapHeight,
+                               __pButton->GetBoundsF().width - selectedBitmapMargin * 2, selectedBitmapHeight + 1);
 
                if (_BitmapImpl::CheckNinePatchedBitmapStrictly(*pUnderlineBitmap))
                {
@@ -955,11 +929,6 @@ _ButtonPresenter::DrawUnderlineBitmap(void)
 void
 _ButtonPresenter::DrawSubTitleEffectBitmap(void)
 {
-       float leftTouchMargin = __pButton->GetLeftTouchMarginF();
-       float topTouchMargin = __pButton->GetTopTouchMarginF();
-       float rightTouchMargin = __pButton->GetRightTouchMarginF();
-       float bottomTouchMargin = __pButton->GetBottomTouchMarginF();
-
        Bitmap* pSubTitleEffectBitmap = __pButton->GetSubTitleEffectBitmap();
 
        if (pSubTitleEffectBitmap)
@@ -972,8 +941,7 @@ _ButtonPresenter::DrawSubTitleEffectBitmap(void)
                        return;
                }
 
-               FloatRectangle bounds(leftTouchMargin, topTouchMargin,
-                               __pButton->GetBoundsF().width - (leftTouchMargin + rightTouchMargin), __pButton->GetBoundsF().height - (topTouchMargin + bottomTouchMargin));
+               FloatRectangle bounds(0, 0, __pButton->GetBoundsF().width, __pButton->GetBoundsF().height);
 
                if (_BitmapImpl::CheckNinePatchedBitmapStrictly(*pSubTitleEffectBitmap))
                {
@@ -1173,7 +1141,7 @@ _ButtonPresenter::OnKeyReleased(const _Control& source, const _KeyInfo& keyInfo)
 {
        _KeyCode keyCode = keyInfo.GetKeyCode();
 
-       if (__pButton->IsFocusModeStateEnabled() == true && keyCode == _KEY_ENTER)
+       if (__pButton->IsFocused() && __pButton->IsFocusModeStateEnabled() == true && keyCode == _KEY_ENTER)
        {
                if (__pButton->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
                {
@@ -1198,12 +1166,10 @@ _ButtonPresenter::OnAncestorEnableStateChanged(const _Control& control)
        if (__pButton->GetEnableState())
        {
                __pButton->SetButtonStatus(_BUTTON_STATUS_NORMAL);
-               __pButton->Invalidate();
        }
        else
        {
                __pButton->SetButtonStatus(_BUTTON_STATUS_DISABLED);
-               __pButton->Invalidate();
        }
 
        return;
@@ -1348,14 +1314,14 @@ _ButtonPresenter::OnTimerExpired(Timer& timer)
 
        if (onTimer == __pTextSlideTimer)
        {
-               TimerForTitleSlideTimeout();
+               TimerForTextSlideTimeout();
        }
 
        return;
 }
 
 result
-_ButtonPresenter::TimerForTitleSlideInit(void)
+_ButtonPresenter::TimerForTextSlideInit(void)
 {
        result r = E_SUCCESS;
 
@@ -1369,7 +1335,7 @@ _ButtonPresenter::TimerForTitleSlideInit(void)
 }
 
 result
-_ButtonPresenter::TimerForTitleSlideStart(void)
+_ButtonPresenter::TimerForTextSlideStart(void)
 {
        result r = E_SUCCESS;
 
@@ -1403,7 +1369,7 @@ CATCH:
 }
 
 result
-_ButtonPresenter::TimerForTitleSlideTimeout(void)
+_ButtonPresenter::TimerForTextSlideTimeout(void)
 {
        Canvas* pCanvas = __pButton->GetCanvasN();
        SysTryReturnResult(NID_UI_CTRL, pCanvas, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] pCanvas is invalid!");
@@ -1414,18 +1380,18 @@ _ButtonPresenter::TimerForTitleSlideTimeout(void)
        {
                pCanvas->Clear(__pButton->GetUserDefinedTextAreaF());
 
-               if (__pTabLargeSelectedBitmap)
+               if (__pTextSlideClippedBitmap)
                {
-                       pCanvas->DrawBitmap(CoordinateSystem::AlignToDevice(__pButton->GetUserDefinedTextAreaF()), *__pTabLargeSelectedBitmap);
+                       pCanvas->DrawBitmap(CoordinateSystem::AlignToDevice(__pButton->GetUserDefinedTextAreaF()), *__pTextSlideClippedBitmap);
                }
        }
        else
        {
                pCanvas->Clear(__textRect);
 
-               if (__pTabLargeSelectedBitmap)
+               if (__pTextSlideClippedBitmap)
                {
-                       pCanvas->DrawBitmap(CoordinateSystem::AlignToDevice(__textRect), *__pTabLargeSelectedBitmap);
+                       pCanvas->DrawBitmap(CoordinateSystem::AlignToDevice(__textRect), *__pTextSlideClippedBitmap);
                }
        }
 
@@ -1445,7 +1411,7 @@ _ButtonPresenter::TimerForTitleSlideTimeout(void)
 
                if (__pTextObject->GetRepeatCount() < 3)
                {
-                       TimerForTitleSlideStart();
+                       TimerForTextSlideStart();
                }
        }
        else