From: vipul Date: Thu, 27 Jun 2013 13:33:14 +0000 (+0530) Subject: OptionMenu FocusUi Issue Fix X-Git-Tag: accepted/tizen/20130924.144426~1^2~186 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=a78a3d81e42283244ab4b54268ddd5f501b1a7c1;p=platform%2Fframework%2Fnative%2Fuifw.git OptionMenu FocusUi Issue Fix Signed-off-by: vipul Change-Id: I4e20a63ecc74941f047fb1ccac852595f8e82bd1 --- diff --git a/src/ui/controls/FUiCtrl_ContextMenuListPresenter.cpp b/src/ui/controls/FUiCtrl_ContextMenuListPresenter.cpp index 45f5e64..cc4cb04 100644 --- a/src/ui/controls/FUiCtrl_ContextMenuListPresenter.cpp +++ b/src/ui/controls/FUiCtrl_ContextMenuListPresenter.cpp @@ -1260,8 +1260,6 @@ _ContextMenuListPresenter::OnKeyReleased(const _Control& source, const _KeyInfo& break; } - pActionEvent->Fire(*pEventArg); - pItem->SetFocused(false); pItem->SetAndInvalidate(false); @@ -1270,6 +1268,8 @@ _ContextMenuListPresenter::OnKeyReleased(const _Control& source, const _KeyInfo& __pContextMenu->SetFocused(false); __pContextMenu->SetVisibleState(false); + pActionEvent->Fire(*pEventArg); + break; } case _KEY_ESC: diff --git a/src/ui/controls/FUiCtrl_OptionMenu.cpp b/src/ui/controls/FUiCtrl_OptionMenu.cpp index f0fd620..f91fb9b 100644 --- a/src/ui/controls/FUiCtrl_OptionMenu.cpp +++ b/src/ui/controls/FUiCtrl_OptionMenu.cpp @@ -232,8 +232,7 @@ void _OptionMenu::OnFocusModeStateChanged(void) { __isFocused = false; - Invalidate(true); - + __pOptionMenuPresenter->ClearFocus(); return; } diff --git a/src/ui/controls/FUiCtrl_OptionMenuItem.cpp b/src/ui/controls/FUiCtrl_OptionMenuItem.cpp index d61efa5..5bc7eca 100755 --- a/src/ui/controls/FUiCtrl_OptionMenuItem.cpp +++ b/src/ui/controls/FUiCtrl_OptionMenuItem.cpp @@ -48,6 +48,7 @@ _OptionMenuItem::_OptionMenuItem(void) , __upperDividerLine(false) , __lowerDividerLine(false) , __selected(false) + , __highlighted(false) , __parentScrollEnable(false) , __leftMargin(0.0f) , __rightMargin(0.0f) @@ -530,10 +531,14 @@ _OptionMenuItem::DrawItem(void) void _OptionMenuItem::DrawItemBitmap(void) { - if (IsSelected()) + if (__selected) { __pBitmapLabel->SetBackgroundBitmap(*__pBitmap[OPTION_MENU_ITEM_DRAWING_STATUS_PRESSED]); } + else if (__highlighted) + { + __pBitmapLabel->SetBackgroundBitmap(*__pBitmap[OPTION_MENU_ITEM_DRAWING_STATUS_HIGHLIGHTED]); + } else { __pBitmapLabel->SetBackgroundBitmap(*__pBitmap[OPTION_MENU_ITEM_DRAWING_STATUS_NORMAL]); @@ -897,17 +902,29 @@ _OptionMenuItem::SetParentScrollEnable(bool enable) } bool -_OptionMenuItem::GetParentScrollEnable() const +_OptionMenuItem::GetParentScrollEnable(void) const { return __parentScrollEnable; } bool -_OptionMenuItem::IsSelected() const +_OptionMenuItem::IsSelected(void) const { return __selected; } +bool +_OptionMenuItem::IsHighlighted(void) const +{ + return __highlighted; +} + +void +_OptionMenuItem::SetHighlighted(bool status) +{ + __highlighted = status; +} + void _OptionMenuItem::SetAndInvalidate(bool flag) { @@ -917,7 +934,7 @@ _OptionMenuItem::SetAndInvalidate(bool flag) } const Tizen::Graphics::Bitmap* -_OptionMenuItem::GetMagentaBgBitmap() const +_OptionMenuItem::GetMagentaBgBitmap(void) const { return __pMagentaBgBitmap; } diff --git a/src/ui/controls/FUiCtrl_OptionMenuPresenter.cpp b/src/ui/controls/FUiCtrl_OptionMenuPresenter.cpp index 510255a..c4bad5b 100755 --- a/src/ui/controls/FUiCtrl_OptionMenuPresenter.cpp +++ b/src/ui/controls/FUiCtrl_OptionMenuPresenter.cpp @@ -73,6 +73,7 @@ _OptionMenuPresenter::_OptionMenuPresenter(_OptionMenu* pOptionMenu) , __itemBitmapHeight(0.0f) , __itemFontSize(0.0f) , __dividerHeight(0.0f) + , __focusedIndex(-1) { } @@ -750,48 +751,36 @@ _OptionMenuPresenter::Draw(void) result _OptionMenuPresenter::DrawFocus(int index) { - Draw(); result r = E_SUCCESS; - int count = __pOptionMenu->GetMaximumVisibleItemsCount(); - - Canvas* pCanvas; - pCanvas = __pOptionMenu->GetCanvasN(); - - SysTryReturn(NID_UI_CTRL, (pCanvas != null), r, r, "[%s] Propagating.", GetErrorMessage(r)); - - FloatRectangle bounds; - - if (index >= count) - { - index = count - 1; - } - + ClearFocus(); _OptionMenuItem* pItem = __pModel->GetItem(index); - bounds = pItem->GetDrawRect(); - - Bitmap* pBitmap = null; - r = GET_BITMAP_CONFIG_N(FOCUSUI::FOCUS, BITMAP_PIXEL_FORMAT_ARGB8888, pBitmap); - SysTryCatch(NID_UI_CTRL, (pBitmap != null), , r, "[%s] Propagating.", GetErrorMessage(r)); - - if (_BitmapImpl::CheckNinePatchedBitmapStrictly(*pBitmap)) - { - r = pCanvas->DrawNinePatchedBitmap(bounds, *pBitmap); - } - else + if (pItem != null) { - r = pCanvas->DrawBitmap(bounds, *pBitmap); + pItem->SetHighlighted(true); + pItem->Invalidate(true); + pItem->DrawFocus(); + __focusedIndex = index; } - delete pCanvas; - delete pBitmap; - return r; +} -CATCH: - delete pCanvas; - return r; +void +_OptionMenuPresenter::ClearFocus(void) +{ + _OptionMenuItem* pPreviousItem; + if (__focusedIndex != -1) + { + pPreviousItem = __pModel->GetItem(__focusedIndex); + if (pPreviousItem != null) + { + pPreviousItem->SetHighlighted(false); + pPreviousItem->RemoveFocusRing(); + pPreviousItem->Invalidate(true); + } + } } void @@ -800,6 +789,7 @@ _OptionMenuPresenter::OnEnterKeyPressed(int selectedIndex) _OptionMenuItem* pItem = null; pItem = __pModel->GetItem(selectedIndex); __selectedIndex = -1; + ClearFocus(); if (pItem != null) { @@ -949,6 +939,7 @@ _OptionMenuPresenter::OnTouchMoved(const _Control& source, const _TouchInfo& tou { __selectedIndex = -1; } + ResetSelectedItem(); return true; } diff --git a/src/ui/inc/FUiCtrl_OptionMenuItem.h b/src/ui/inc/FUiCtrl_OptionMenuItem.h index c0513d1..68abb7d 100755 --- a/src/ui/inc/FUiCtrl_OptionMenuItem.h +++ b/src/ui/inc/FUiCtrl_OptionMenuItem.h @@ -108,9 +108,12 @@ public: Tizen::Graphics::FloatRectangle GetPressedDrawRect(void) const; void SetParentScrollEnable(bool enable); - bool GetParentScrollEnable() const; + bool GetParentScrollEnable(void) const; - bool IsSelected() const; + bool IsSelected(void) const; + bool IsHighlighted(void) const; + + void SetHighlighted(bool status); int Release(void); @@ -157,6 +160,7 @@ private: bool __pressed; bool __selected; + bool __highlighted; bool __parentScrollEnable; float __leftMargin; diff --git a/src/ui/inc/FUiCtrl_OptionMenuPresenter.h b/src/ui/inc/FUiCtrl_OptionMenuPresenter.h index 82587ba..e67e0eb 100644 --- a/src/ui/inc/FUiCtrl_OptionMenuPresenter.h +++ b/src/ui/inc/FUiCtrl_OptionMenuPresenter.h @@ -71,6 +71,7 @@ public: virtual result Install(void); virtual result Draw(void); result DrawFocus(int index); + void ClearFocus(void); void OnEnterKeyPressed(int selectedIndex); virtual result DrawBackground(Tizen::Graphics::Canvas* pCanvas); virtual result AddItem(const Tizen::Base::String& text, int actionId, const Tizen::Graphics::Bitmap* normalBitmap, const Tizen::Graphics::Bitmap* pPressedBitmap, const Tizen::Graphics::Bitmap* pHighlightedBitmap); @@ -156,6 +157,7 @@ private: float __itemBitmapHeight; float __itemFontSize; float __dividerHeight; + int __focusedIndex; }; // _OptionMenuListPresenter }}} // Tizen::Ui: Control